配置文件
分为两种配置文件
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=utf8
name: root
password: 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 li
name2: '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: 1
name: zhangsan
age: 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中获取
@Autowired
private 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
@Autowired
private mylist mylist;
@Autowired
private 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-**开头 后续名字根据实际定
在主配置文件下,切换环境
只需要切换文件名,就可以完成切换环境