天天看点

spring boot多环境自定义配置文件

自定义配置文件+多环境,多数据源,redis缓存和多线程等。

网上有很多是用application-{profile}.properties实现的,这种一个profile放到一种文件的做法,我不太喜欢,我还是喜欢一大堆文件用一个profile管理。

像这种方式,dev是测试环境,prd是正式环境的。

spring boot多环境自定义配置文件

application.properties里面的内容为spring.profiles.activ=dev,代表默认激活dev

dev/basic.properties的内容为name=tom,prd下则为name=jack

下面我建立properties包,下面的文件分别对应配置文件,用来读取内容。

spring boot多环境自定义配置文件

对于application.properties的内容直接用@Value读取即可,具体内容为

@Component

public class ApplicationProperties {

public static String env;

@Value("${spring.profiles.activ}")

public void setEnv(String env) {

ApplicationProperties.env = env;

}

}

 而我们的自定义文件需要指定路径,记得带上${spring.profiles.activ},然后用@Value读取即可,只不过用@Value,需要在非静态set方法注入,像刚刚ApplicationProperties做的那样,在这里我们用@ConfigurationProperties,直接有静态set方法就可注入(没set则注入不了)。BasicProperties的内容如下:

@Component

@PropertySource("classpath:${spring.profiles.activ}/basic.properties")

@ConfigurationProperties

public class BasicProperties {

public static String name;

public static void setName(String name) {

BasicProperties.name = name;

}

}

 然后随便写个HelloController测试一下吧,我的属性都是静态变量,可以直接访问,如果你用私有的,再当成组件注入也是可以的,他们都有@Component管理,内容如下:

@RestController

public class HelloController {

@RequestMapping("/hello/app")

public String app(){

return ApplicationProperties.env;

}

@RequestMapping("/hello/basic")

public String basic(){

return BasicProperties.name;

}

}

启动服务,访问http://localhost:8080/hello/app 显示dev,

访问http://localhost:8080/hello/basic显示tom 

然后用maven命令打包(package),在target目录下可以看到jar包,比如我的打开cmd,用命令启动(记得激活prd)

java -jar D:/workspace/moss-auto/target/moss-auto-0.0.1-SNAPSHOT.jar --spring.profiles.activ=prd

然后

访问http://localhost:8080/hello/app 显示prd,

访问http://localhost:8080/hello/basic显示jack 

继续阅读