spring boot 提供
spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。
profile的配置文件可以按照application.properyies的放置位置一样,放于以下四个位置:
当前项目根目录的 “/config”的子目录下
当前项目根目录下
classpath根目录的“/config”包下
classpath的根目录下
demo演示
定义俩个properties文件,
application-dev.properties和application-prod.properties,
并在俩个文件中都分别
开发环境server.port=8081
生产环境server.port=8082
在application.properyies也写上,并把profile切换到application-dev.properties的配置文件
#banner关掉spring.main.banner-mode=offserver.port=8093spring.profiles.active=dev
启动SpringbootApplication主程序入口,在控制台下打印出启动tomcat的端口号为配置文件application-dev.properties设置的8081
除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,@Profile可以作用于方法或类上。
定义一个User类
@Data@NoArgsConstructor@AllArgsConstructorpublic class User {private Integer id;private String name;private String address;}
创建ProfilesConfig 类,创建一个id为profilesConfig1的bean,在开发环境下内容为id=1的User对象;在生产环境下内容为id=1的User对象
@Configurationpublic class ProfilesConfig {@Bean("profilesConfig1")@Profile("prod")public User getUser1(){return new User(1, "李磊磊1", "北京市");}@Bean("profilesConfig1")@Profile("dev")public User getUser2(){return new User(2, "李磊磊1", "北京市");}}
application-dev.properties的配置文件
#banner关掉spring.main.banner-mode=offserver.port=8093spring.profiles.active=dev
运行SpringbootApplicationTests,打印id为profilesConfig1的bean,控制台显示为测试环境下的profilesConfig1,id=2的user
@SpringBootTestclass SpringbootApplicationTests {@Autowired@Qualifier("profilesConfig1")private User profilesConfig1;@Testvoid contextLoads() {System.out.println(profilesConfig1);}}
注:
除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile
spring.profiles.include=dev,prod
通过命令行设置
在命令行运行时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识。java -jar xxx.jar --server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888。
通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?是的,所以Spring Boot也贴心的提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。
如果不在application.properties设置spring.profiles.active,也可以在运行jar的时候,使用java -jar xxx.jar --spring.profiles.active=***命令行指定加载配置文件
执行java -jar xxx.jar --spring.profiles.active=dev,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod)