SpringBoot多环境配置+自定义属性+随机数配置
1、SpringBoot多环境配置
1.1多环境配置的引入
在项目的整个研发过程中,同一个项目会面临着不同的使用环境。使用环境的不同,需要的配置信息也会不同。例如:数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境中,我们是使用正式的数据库,如果在项目中只有一个application.properties(application.yml)一个配置文件的话,该文件中的属性值会经常需要改动,就会使项目整体的体验变得非常差,而且出错率也极高。
这时候,我们可以使用profile在不同的环境下配置不同的配置文件,这样一来,在SpringBoot项目中就出现了多环境的配置文件。
1.2多环境配置的设置
创建多环境配置文件时,需要遵循SpringBoot允许的命名约定来命名,格式为:application-{profile}.properties。
例如:
开发环境:application-dev.properties
生产环境:application-prod.properties
测试环境:application-test.properties
默认环境:application.properties
多环境配置文件和application.properties文件一样可以放置在项目中四个位置任意一处
1.3多环境的切换
项目如何切换到其他环境的配置文件?
在application.properties中,设置spring.profiles.active来具体激活一个或者多个配置文件,如果没有指定任何profile的配置文件的话,springboot默认会启动application-default-default.properties(默认环境)。
例如:spring.profiles.active=dev
dev就是配置文件名中的名称
开发环境。
1.4命令行设置属性值
除了通过设置配置文件来修改属性外,还可以通过命令行来修改属性值。在命令行运行时,连续的两个减号--就是对application.properties中的属性值进行赋值的标识,所以,java-jar xxx.jar--server.port=8888命令等价于我们在application.properties中添加属性server.port=8888。
通过命令行来修改属性值确实比较便利,但是通过命令行就能更改应用运行的参数,对于项目的安全性构成了一定的威胁。所以SpringBoot框架中也提供了屏蔽命令行访问属性的设置,加入:SpringApplication.setAddCommandLineProperties(false)就可以屏蔽。
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124162114866-1448969276.png)
2、自定义属性
SpringBoot可以在配置文件中修改默认约定的属性值,还可以添加一些自己需要的属性,也就是可以自定义一些属性,这些自定义的属性可以使用@Value注解将属性值注入到beans中,或者使用@ConfigurationProperties注解将属性值绑定到结构化的beans中。
2.1配置文件中的自定义属性
自定义的属性可以放到application.properties或者application.yml全局配置文件中,也可以自定义配置文件中定义。
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124162106506-1571480633.png)
2.2绑定属性值
定义一个Student类需要添加@Component注解,让spring在启动的时候扫描到该类,并添加到spring容器中。给属性绑定值,有两种方法:
2.3@Value的使用
@Value注解可以绑定属性值,但是只能绑定简单类型的属性值,通常用SpEL方式绑定。
例如:
1.![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124162001692-885053185.png)
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124162001692-885053185.png)
2.getter/setter方法+toString方法
3.在controller层添加:
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161954351-1802661252.png)
必须使用@Autowired,自动注入,自己手动new没有作用,不能绑定值。
4.启动项目,在网页运行页面,然后在控制台会输出
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161939590-1976600311.png)
2.4@ConfigurationProperties的使用
@ConfigurationProperties用于批量的为属性绑定值,可以用于任何数据类型,使用时需要指定配置文件的属性前缀。
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161910704-697303480.png)
3、随机数配置
SpringBoot支持在系统加载时配置随机数,使用${random}可以生成各种不同类型的随机值,从而简化了代码生成的麻烦,例如生成int值、long值、string字符串。
3.1定义随机数
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161759419-633138062.jpg)
3.2绑定属性值
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161747657-1912480948.png)
3.3在Controller中添加
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161719167-958527471.jpg)
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161705116-37947815.jpg)
扩展:
使用@Value绑定复杂的数据类型,比如数组,集合
1.属性文件
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161619585-1658370357.png)
修改为
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161610882-1999449045.png)
2.绑定
![](https://img2018.cnblogs.com/blog/1412155/201811/1412155-20181124161602687-1052118312.png)