自定义配置文件+多环境,多数据源,redis缓存和多线程等。
网上有很多是用application-{profile}.properties实现的,这种一个profile放到一种文件的做法,我不太喜欢,我还是喜欢一大堆文件用一个profile管理。
像这种方式,dev是测试环境,prd是正式环境的。
application.properties里面的内容为spring.profiles.activ=dev,代表默认激活dev
dev/basic.properties的内容为name=tom,prd下则为name=jack
下面我建立properties包,下面的文件分别对应配置文件,用来读取内容。
对于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