SpringBoot-yaml(在配置文件中设置多个对象)
SpringBoot 配置文件SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的application.properties语法结构 :key=valueapplication.yml语法结构 :key:空格 value**配置文件的作用 :**修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;比如我们可以在配置文件中修改Tomcat
·
yaml
1.基础语法
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
k: v
注意:
-
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: “zhang\n san” 输出 :zhang换行 san
-
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘zhang\n san’ 输出 :zhang\n san
对象、Map(键值对)
#对象、Map格式
k:
v1:
v2:
在下一行来写对象的属性和值得关系,注意缩进;比如:
student:
name: zhangsan
age: 3
行内写法
student: {name: zhangsan,age: 3}
数组( List、set )
用 - 值表示数组中的一个元素,比如:
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
修改SpringBoot的默认端口号
配置文件中添加,端口号的参数,就可以切换端口;
server:
port: 8082
2.给参数设置默认值
- yml配置,给参数设置默认值
db:
num: 1
user: ${MYSQL-USER:root}
password: ${MYSQL-PWD:root}
url:
0: jdbc:mysql://${MYSQL_HOST:
#解释:代码里先从配置文件(springboot的yml配置或者命令行指定)去找key是MYSQL-USER的值,把它的值赋值给user,如果该参数不存在,则就把root赋值给user。
- java中取值时设默认值
//yml配置
province:
city: xxx
//java中取值最好也写上默认值
@Value("${province.city:beijing}")
public String city;
- java -jar -DMYSQL-USER=zs xxx.jar(注入参数)
总结
为什么要这样写,我想到的一点是方便以后修改配置,比如环境移植,换一个新的环境我只需要修改yml配置,或者干脆就在命令行修改
3.yml的配置与映射
导入依赖
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
例如:实体类 Person 类
@Data
@Component //注册bean到容器中
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//有参无参构造、get、set方法、toString()方法
}
编写一个yaml配置!
person:
name: qinjiang
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
我们刚才已经把person这个对象的所有值都写好了,我们现在来注入到我们的类中!
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
yaml配置注入到实体类完全OK!
4.yml中配置多个对象
-
yml数组对象的写法
#写法一 ftp: ftpInfos: #类中的属性名 - host: 10.1.63.26 port: 21 userName: jiangxi password: 1qaz@WSX ringPaths: ["/home/jiangxi/lihewei/sync1/","/home/jiangxi/lihewei/sync2/"] - host: 10.1.63.36 port: 22 userName: sichuan password: 1qaz@WSX ringPaths: ["/home/sichuan/lihewei/sync1/","/home/sichuan/lihewei/sync2/"] #写法二 ftp: ftpInfos: - {host: 10.1.63.26, port: 21, userName: jiangxi, password: 1qaz@WSX, ringPaths: ["/home/jiangxi/lihewei/sync1/","/home/jiangxi/lihewei/sync2/"]} - {host: 10.1.63.36, port: 22, userName: sichuan, password: 1qaz@WSX, ringPaths: ["/home/sichuan/lihewei/sync1/","/home/sichuan/lihewei/sync2/"]}
-
编写配置类
@Data @Component @ConfigurationProperties(prefix = "ftp") // 配置文件的前缀 public class ftpConfig { private FtpInfo[] ftpInfos; }
-
获取数组对象
public class Demo { @Autowired private ftpConfig ftpConfig; @Scheduled(cron = "${job.test}") public void test() { //获取ftpInfo对象的数组 FtpInfo[] ftpInfoList = ftpConfig.getFtpInfos(); if (ftpInfoList.length>0){ //遍历list集合,取出多个ftp配置 for (FtpInfo ftpInfo : ftpInfoList) { System.out.println(ftpInfo.getHost()); System.out.println(ftpInfo.getUserName()); System.out.println("路径:"); for (String ringPath : ftpInfo.getRingPaths()) { System.out.println(ringPath); } System.out.println("路径"); } } } }
5.启动springboot项目指定配置文件
- java -jar -Xms512M -Xmx2048M -Dspring.config.location=config/application-dev.yml getMd5Info.jar
- home/jdk1.8/bin/java -jar …(未配置jdk的环境变量时,需要先指定jdk路径)
更多推荐
已为社区贡献1条内容
所有评论(0)