一、问题
软件开发中经常有开发环境、测试环境、生产环境,而且一般这些环境配置会各不相同,手动改配置麻烦且容易出错,如何管理不同环境的配置参数呢?spring-boot + maven可以解决不同环境独立配置不同参数的问题。
二、多环境配置
不同环境的配置yml文件名不一样:
1application-dev.yml(开发环境)
2application-test.yml(测试环境)
3application-prd.yml(生产环境)
eg:
三、配置文件
application-dev.yml配置示例:
1web:
2 resource-path: D:/dreamer-cms/
3
4spring:
5 datasource:
6 name: dev
7 url: jdbc:mysql://127.0.0.1:3306/dreamer-cms?serverTimezone=GMT&useSSL=false&useUnicode=true&characterEncoding=UTF8
8 username: root
9 password: root
10 driver-class-name: com.mysql.cj.jdbc.Driver
11 redis:
12 host: 127.0.0.1
13 port: 6379
14 timeout: 2000
15 password: YTU3e^u!gN^6HHPm
16 jedis:
17 pool:
18 max-idle: 100
19 min-idle: 50
20 max-wait: -1
application.yml
1spring:
2 profiles:
3 active: dev #如果要切换不同环境,只需要修改spring.profiles.active即可。
如果要切换不同环境,只需要修改spring.profiles.active即可。application-prd.yml和dev配置一样,只修改配置项的值即可。
四、读取配置参数
1、读取单个配置参数:
1@Component
2public class FileConfiguration {
3 @Value("${web.resource-path}")
4 private String resourceDir;
5
6 public String getResourceDir() {
7 return resourceDir;
8 }
9
10 public void setResourceDir(String resourceDir) {
11 this.resourceDir = resourceDir;
12 }
13}
如果只是读取单个配置信息可以直接使用@Value注解,如果要读取多个配置,建议使用@ConfigurationProperties(prefix = "web")注解,prefix="web"则表示读取web下的配置。如下代码:
2、读取多个配置参数:
1web:
2 name: wangjn
3 age: 18
1@Component
2@ConfigurationProperties(prefix = "web")
3public class WebConfig {
4 private String name;
5 private Integer age;
6 //省略getter、setter
7}
五、验证环境参数
1@RestController
2public class TestController {
3 @Autowired
4 private WebConfig webConfig;
5
6 @RequestMapping("/env")
7 @ResponseBody
8 public Object testEnv() {
9 return webConfig;
10 }
11}
六、启动设置环境
1、启动jar包时设置spring.profiles.active
1java -jar muti-env-config.jar --spring.profiles.active=prd
2、maven打包时候设置环境(设置 prd 环境)
1clean package -DskipTests -Pprd