配置文件
分为两种配置文件
properties、yml
这两配置文件的语法是不同的
他们两个可以共存,但实际开发只会用其中一种,统一
如果两个同时存在,会优先加载properties配置文件,才会加载yml配置文件。
如果两个配置文件配置了相同的内容,那么会以properties中的配置为主
properties配置文件
语法
K.V=
server.port=8081
从配置文件中读取自定义K.V值
配置文件
MyKey.key=MX
java文件
java">//格式要求 必须是 "${}" 从配置文件获取,放入新的变量内@Value("${MyKey.key}")private String mykey;@RequestMapping("hi")public String hi(){return "Hi,"+mykey;//打印}
properties的优点
1.格式简单 K.V值
properties的缺点:
相同的前缀需要重复写,不够简便
编码格式默认不是UTF8 重新打开,中文会乱码
解决方案 修改默认编码格式
yml配置文件
可读性高,写法简单
支持更多数据类型 清单,散列表,标量等数据形态
支持更多的编程语言,不止支持java 还支持goland php ruby python..等等
yml默认为UTF8 重新打开 不会乱码
语法
k: v (v前面有空格 不能忘了)
单级目录
java">MyKey: MX
多级目录
java">spring:datasource:url: jdbc:mysql://127.0.0.1:3306/my?characterEncoding=utf8name: rootpassword: 123456
获取配置文件的值
yml
java">MyKey: MX
java文件
java">//获取yml的信息@Value("${MyKey}")private String ymlKey;@RequestMapping("hi")public String hi(){return "Hi,"+mykey+" port: "+prot+" ymlkey: "+ymlKey;//打印}
示例
yml
java">myname:name1: xiao \n liname2: 'xiao \n wang'name3: "xiao \n qiang"
java文件
java">@Value("${myname.name1}")private String name1;@Value("${myname.name2}")private String name2;@Value("${myname.name3}")private String name3;@RequestMapping("/hi")public String hi(){System.out.println("--------------");System.out.println(name1);System.out.println("--------------");System.out.println(name2);System.out.println("--------------");System.out.println(name3);return "Hi,"+mykey+" port: "+prot+" ymlkey: "+ymlKey;//打印}
想要这个方法调用 必须到网站上刷新一次 让这个方法执行一次 才可以看到打印信息
可以看到 双引号会执行里面的特殊符号 而没加或者加单引号的 会原样打印
获取配置文件的类数据 并且存储到spring中
yml
java">#两种写法都是可以的
#原始写法
student:id: 1name: zhangsanage: 18#行内写法
student2: {id: 2,name: lisi,age: 20}
类
java">@Component
@ConfigurationProperties(prefix = "student2")
//从配置文件中读取数据 配置到当前类中 并且存入Spring内
//使用@ConfigurationProperties注解时,实体类不能没有set方法, 因为@ConfigurationProperties类是通过set方法把配置文件的数据赋值给类内字段的
public class Student {public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}private int id;private String name;private int age;
}
启动类
java">//从Spring中获取@Autowiredprivate Student student;@RequestMapping("/student")public String student(){return "ID: "+student.getId()+" Name: "+ student.getName()+" age: "+student.getAge();}
获取配置文件中的集合数据
java">#原始写法
mylist:dbtype:- list1- list2- list3#行内写法
ulist: {name: [name1,name2,name3]}
类
java">@Setter
@Getter
@ConfigurationProperties(prefix = "mylist")
//ConfigurationProperties注解是通过set方法注入的,所以dbtype必须和配置文件中的文件一致
@Component
public class mylist {private List dbtype;
}
java">@Setter
@Getter
@ConfigurationProperties(prefix = "ulist")
//ConfigurationProperties注解是通过set方法注入的,所以name必须和配置文件中的文件一致
@Component
public class ulist {private List name;
}
启动类
java"> @Autowiredprivate mylist mylist;@Autowiredprivate ulist ulist;@RequestMapping("/mylist")public String mylist(){return mylist.getDbtype().get(0)+" "+mylist.getDbtype().get(1)+" "+mylist.getDbtype().get(2)+" size: "+mylist.getDbtype().size();}@RequestMapping("/ulist")public String ulist(){return ulist.getName().get(0)+" "+ulist.getName().get(1)+" "+ulist.getName().get(2)+" size: "+ulist.getName().size();}
配置环境文件
在实际开发中会用到多种环境 在切换环境时 修改代码是比较繁琐的,所以可以创建环境文件
环境文件名必须是以application-开头 后续名字根据实际定
在主配置文件下,切换环境
只需要切换文件名,就可以完成切换环境