SpringBoot配置文件(热部署、Properties和YAML、自定义属性对象集合)
1、热部署
修改完代码,想让SpringBoot自动加载我们修改的内容(pom.xml添加依赖)
<!-- spring-boot的开发工具,可以在修改代码时,不需要手动重启服务器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
2、 配置文件:Properties和YAML
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,
就可以使用application.properties或者application.yml/application.yaml(官方推荐使用的格式)进行配置。
SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件
Application属性文件:按优先级排序,位置高的将覆盖位置低的
# tomcat 端口号
server.port=18081
# 配置项目所在的根目录
server.servlet.context-path=/springboot-demo02
yml配置文件
简介:
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁
server:
port: 8899
冒号(:)与value之间必须有一个空格,另起一行时尽量不要用tab,推荐使用空格空行
properties文件与yml文件之间的区别:
- properties文件中,配置属性的方式是key=value的方式
- 在yml文件中,配置属性的方式是: key: value
application.properties的配置方式:
server.port=8999
yml文件的配置方式:
server:
port: 8899
将yml与properties对比之后发现,yml最大的好处在于其拥有天然的树状结构,所以着手尝试将properties文件更改为yml文件,发现了几个要注意的地方:
- 1、在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
- 2、yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
- 3、在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进特么只能用空格!!!!)
- 4、每个k的冒号后面一定都要加一个空格;
在线的properties文件与yml文件的转换:https://www.toyaml.com/index.html
yml自定义属性:
application.yml
user:
id: 1001
username: laosan
controller.java
@Controller
public class controller {
@Value("${user.id}")
private Integer id;
@Value("${user.username}")
private String usernmae;
配置随机值
通过${random}来产生int值,long值或者String字符串,来支持属性的随机值.
yml中
#随机字符串
suke.secret=${random.value}
#随机int
suke.number=${random.int}
#随机long
suke.bignumber=${random.long}
#10以内的随机数
suke.number.less.than.ten=${random.int(10)}
#12-65的随机数
suke.number.in.range=${random.int[12,65]}
读取使用注解:@Value( "${suke.secret}")
属性占位符
当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)
suke.name=www.suke.com
suke.desc=${suke.name} is a domain name
最后suke.desc的值是: www.suke.com is a domin name
配置绑定对象,数组
user.java实体类:
@Data @ToString @Component @ConfigurationProperties(prefix = "user")//绑定配置类中的user属性 public class User { private Integer id; private String username; private Integer age; private Date nowtime = new Date(); private String random; private List<Integer> list = new ArrayList<>(); private List<User> users = new ArrayList<>(); }
如果@ConfigurationProperties(prefix = "user") 报警告
//解决这个警告,我们只需要配一个依赖,点击提示自动生成 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
application.yml配置文件
server: port: 8899 spring: jackson: time-zone: Asia/Shanghai //时区时间 date-format: yyyy-MM-dd HH:mm:ss //显示日期格式
#json对属性值为null 忽略
default-property-inclusion: NON_NULL
user: id: 1002 username: zhangsan age: 18 random: ${random.value} //随机生成一个String随机数 list: - 123 //集合中的第一个值 - 234 - 345 users: - id: 1003 //对象集合中的第一个对象 username: lisi age: 28 random: ${random.value} - id: 1004 username: wangwu age: 38 random: ${random.value}
测试类:
@Autowired private User user; @RequestMapping("hello") @ResponseBody public User helloTest() { System.out.println(user); return user; }
自定义配置文件@propertySources
application.properties文件中,但是在一些场景下,比如某个配置项比较多时,为了方便区分,我们会分开存放
可使用@propertySources设置数组,引入多个文件.