一、参数配置:程序员的“遥控器”
springboot应用就像一个超级智能的变形金刚,而参数配置就是你手里的万能遥控器!你想让它变成温柔的hello kitty模式?调参数!想让它变成狂暴的哥斯拉模式?还是调参数!它就像你女朋友的脾气——全看你如何“配置”!
参数配置的三大门派:
application.properties - 保守派,喜欢用点号分隔
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/my_db
application.yml - 文艺派,喜欢用缩进写诗
server:
port: 9090
spring:
datasource:
url: jdbc:mysql://localhost:3306/my_db
@value注解 - 直男派,直接注入不啰嗦
@value("${my.secret.password}")
private string password; // 默认值:123456(才怪!)
二、详细配置步骤:从“hello world”到“hello 宇宙”
第1步:基础配置 - 给你的应用穿条裤子
# application.yml - 基础生存包
server:
port: 8080 # 端口号,建议别用80,免得和隔壁老王冲突
servlet:
context-path: /api # 上下文路径,相当于给你的应用加个姓
spring:
application:
name: my-awesome-app # 应用名,起得霸气点准没错
# 数据库配置 - 应用的“肠胃系统”
datasource:
url: jdbc:mysql://localhost:3306/my_db?usessl=false&servertimezone=utc
username: root
password: iforgetitagain # 建议别写这里,用环境变量!
driver-class-name: com.mysql.cj.jdbc.driver
hikari:
maximum-pool-size: 20 # 连接池大小,人多好办事
minimum-idle: 5 # 最少闲着的连接,不能太懒
connection-timeout: 30000 # 连接超时,30秒还连不上就放弃吧
第2步:高级配置 - 给你的应用装上“涡轮增压”
# 继续在application.yml中添加
spring:
# jpa配置 - 对象和数据库的“翻译官”
jpa:
show-sql: true # 显示sql,方便偷看它在背后说什么
hibernate:
ddl-auto: update # 自动更新表结构,危险但方便!
properties:
hibernate:
dialect: org.hibernate.dialect.mysql8dialect
# redis配置 - 应用的“短期记忆”
redis:
host: localhost
port: 6379
timeout: 3000ms # 超时时间,3秒还想不明白就算了
lettuce:
pool:
max-active: 8 # 最大活跃连接,别太多会打架
# 文件上传配置 - 胃口大小设置
servlet:
multipart:
max-file-size: 10mb # 单个文件最大,别上传整个电影!
max-request-size: 100mb # 总请求大小
# 自定义配置 - 你的专属“秘密武器”
myapp:
config:
max-retry-count: 3 # 重试次数,事不过三!
enable-feature-x: true # 要不要开启某个神秘功能
api-key: ${api_key:default-key} # 优先用环境变量,没有就用默认值
第3步:profile配置 - 应用的多重人格
创建不同环境的配置文件,让你的应用学会“变脸”:
application.yml # 公共配置,大家都得遵守 application-dev.yml # 开发环境 - 随便折腾版 application-test.yml # 测试环境 - 装模作样版 application-prod.yml # 生产环境 - 正经上班版
application-dev.yml(开发环境)
spring:
datasource:
url: jdbc:h2:mem:testdb # 内存数据库,用完就扔
username: sa
password:
h2:
console:
enabled: true # 启用h2控制台,可视化偷看数据
path: /h2-console
logging:
level:
com.myapp: debug # 详细日志,方便甩锅时找证据
org.springframework.web: debug
application-prod.yml(生产环境)
spring:
datasource:
url: jdbc:mysql://prod-db:3306/prod_db?usessl=true
username: ${db_username} # 从环境变量读取,安全第一!
password: ${db_password}
logging:
level:
com.myapp: warn # 生产环境日志别太多,磁盘会哭
org.springframework: error
management:
endpoints:
web:
exposure:
include: health,info # 只暴露必要的监控端点
第4步:配置类 - 程序员最后的倔强
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;
@component
@configurationproperties(prefix = "myapp.config")
@data // lombok注解,自动生成getter/setter
public class myappconfig {
/**
* 最大重试次数
* 默认值:防止有人不配置时系统直接崩溃
*/
private int maxretrycount = 3;
/**
* 是否开启神秘功能x
* 默认值:false(安全第一)
*/
private boolean enablefeaturex = false;
/**
* api密钥
* 建议:写在配置文件里不如写在环境变量里
* 写在环境变量里不如写在脑子里(但容易忘)
*/
private string apikey = "change-me";
/**
* 服务器列表
* 示例配置:myapp.config.servers[0]=http://server1
* myapp.config.servers[1]=http://server2
*/
private list<string> servers = new arraylist<>();
/**
* 连接超时时间
* 单位:毫秒
* 哲学问题:等待多久才算真爱?
*/
private duration connectiontimeout = duration.ofseconds(30);
}
// 使用配置类
@service
public class myservice {
@autowired
private myappconfig config;
public void dosomething() {
if (config.isenablefeaturex()) {
system.out.println("神秘功能已开启,但没人知道是啥功能");
}
for (int i = 0; i < config.getmaxretrycount(); i++) {
try {
// 尝试做事
break;
} catch (exception e) {
system.out.println("第" + (i+1) + "次失败,还剩" +
(config.getmaxretrycount() - i - 1) + "次机会");
}
}
}
}
第5步:环境变量和命令行参数 - 终极武器
# 运行时指定配置 java -jar myapp.jar --server.port=9090 --spring.profiles.active=prod # 使用环境变量(linux/mac) export spring_datasource_password=supersecret123 export myapp_config_apikey=myawesomekey java -jar myapp.jar # 使用环境变量(windows powershell) $env:spring_datasource_password="supersecret123" java -jar myapp.jar
优先级总结(从高到低):
- 命令行参数(--开头)
- 环境变量(spring_application_json)
- profile特定配置文件(application-{profile}.yml)
- 默认配置文件(application.yml)
- @configurationproperties默认值
三、配置验证 - 给你的配置上个保险
import javax.validation.constraints.*;
@component
@configurationproperties(prefix = "myapp.config")
@validated // 开启验证
@data
public class validatedconfig {
@notnull(message = "api密钥不能为空,除非你想裸奔")
@size(min = 10, max = 100, message = "api密钥长度要在10-100之间")
private string apikey;
@min(value = 1, message = "重试次数至少1次,放弃治疗不可取")
@max(value = 10, message = "重试次数最多10次,要学会放弃")
private int maxretrycount = 3;
@pattern(regexp = "^(http|https)://.*", message = "url必须以http或https开头")
private string baseurl;
@asserttrue(message = "如果开启功能x,必须提供密钥")
public boolean isfeaturexvalid() {
return !enablefeaturex || (apikey != null && !apikey.isempty());
}
}
四、动态刷新配置 - 不用重启的魔法
# 添加spring cloud config依赖后
spring:
cloud:
config:
enabled: true
config:
import: optional:configserver:http://localhost:8888 # 配置中心地址
# 在需要刷新的类上添加
@refreshscope
@component
public class configrefreshservice {
@value("${myapp.config.feature-toggle}")
private string featuretoggle;
// 配置更新后,这个值会自动刷新!
}
五、配置加密 - 让密码不再裸奔
# 使用jasypt加密敏感信息
spring:
datasource:
password: enc(加密后的字符串) # 看起来像乱码就对了
# 启动时提供加密密钥
java -jar myapp.jar --jasypt.encryptor.password=my-secret-key
总结:配置之道,存乎一心
springboot的配置系统就像是一套精密的乐高积木,既有现成的标准件(自动配置),也允许你自由发挥(自定义配置)。掌握配置的艺术,需要记住几个核心原则:
配置的“三大纪律八项注意”
- 安全第一:密码、密钥永远不要硬编码,用环境变量或配置中心
- 环境隔离:开发、测试、生产配置严格分开,别在开发环境玩生产数据
- 适度原则:不要过度配置,springboot的自动配置已经帮你做了80%的工作
配置的“哲学思考”
- yaml vs properties:yaml就像写诗,properties就像写清单,看你喜欢文艺还是务实
- 配置优先级:记住命令行参数 > 环境变量 > 配置文件,这是权力的游戏!
- 默认值的重要性:给配置项设置合理的默认值,就像给程序买保险
最后
记住,最好的配置是不需要配置(但这是理想状态)。springboot的“约定优于配置”理念,意味着只要你遵守约定,它就会默默为你做好一切。但当你有特殊需求时,这套强大的配置系统又能给你充分的自由。
现在,拿起你的配置“遥控器”,去打造一个既听话又能干的springboot应用吧!记住:配置不是目的,让应用更好地服务业务才是终极目标。祝你在配置的海洋里乘风破浪,但别淹死在配置文件中!
到此这篇关于一文带你深入了解springboot参数配置的详细步骤的文章就介绍到这了,更多相关springboot参数配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论