什么是配置文件
如下图:
SpringBoot项目中会有一个自带的配置文件,它是properties后缀的。
配置文件的作用
配置文件是用来配置项目中的一些重要数据的。
如:数据库连接信息、项目的启动端口、日志等等。
如果没有这些信息,SpringBoot就无法连接和操作数据库,甚至不能保存用于排查错误信息的日志,所以,配置文件的作用是很重要的。
两种后缀的配置文件
.properties后缀的配置文件
它的格式为 key:value 格式的键值对
如果是多级的key,要用 . 来隔开,并且,即使有多个key都有相同的前缀,也不能简写。
如下:
(’‘#’是注释)
此时我想将启动端口设置为9090,此时就可以在配置文件里面输入如下:
然后我们启动项目看一下启动端口是否修改成功,如下:
.yaml(yml)后缀的配置文件
.yaml的配置文件和.yml是相同的,后面就全部使用.yml为后缀
.yml文件的格式比较灵活,但是也很容易出错,它的写法类似于json,如下:
和.properties不同的是,它的每个层级都可以向下延伸,也就是说一个key后面可以跟多个不同的key。每个下级key都要和它的上级key之间留出一个 tab 的距离,并且在:后还要加一个空格。
如下:
key1:key2: value
两种后缀的区别和优缺点
.properties的优点:系统默认的配置文件、格式简单、优先级比.yml高(如果两个后缀的配置文件同时存在,并且有相同的配置信息,此时以.properties为优先)
.properties的缺点:写法比较冗余(多个同一目录下的key,需要写多次前缀)
.yml的优点:
1. 可读性高(不冗余),便于理解
2. 支持多种数据格式,如数组、对象...
3. 支持更多的编程语言
.yml的缺点:语法太灵活,容易出错。
用户自定义配置(.yml为例)
用户自定义的配置也是 key:value 的格式
如下:
mystr1: 你\n好
mystr2: '你\n好'
mystr3: "你\n好"
如果我们想要将这几个自定义的配置内容拿到,此时需要一个注解:@Value("${key}"),并且获取配置内容的类要被五大类注解修饰。
如果配置内容不加引号或加单引号,此时读取的是原本内容(特殊字符也不加翻译),如果加了双引号,此时会按照内容的原意返回,如下:
mystr1: 你\n好
mystr2: '你\n好'
mystr3: "你\n好"
@Controller
public class TestController {@Value("${mystr1}")private String mystr1;@Value("${mystr2}")private String mystr2;@Value("${mystr3}")private String mystr3;@PostConstructpublic void doPostConstruct() {System.out.println("-------------------------------");System.out.println(mystr1);System.out.println(mystr2);System.out.println(mystr3);System.out.println("-------------------------------");}
}
此时运行项目,就可以看到区别:
第一个是不加引号,第二个是加单引号,此时都没有将\n翻译为换行,而第三个加的双引号进行了换行。
除了上述的获取方式还有第二种。
student:id: 1name: "张三"age: 18
@ConfigurationProperties("student")
@Component
@Setter
@Getter
@ToString
public class StudentComponent {private int id;private String name;private int age;
}
我们给类加上了@ConfigurationProperties("key")注解。
此时会将key名相同,并且实现了setter方法的属性进行赋值,
此时我们输出这个类的信息。
@Controller
@ResponseBody
public class TestController {@Autowiredprivate StudentComponent component;@PostConstructpublic void doPostConstruct() {System.out.println(component);}
}
SpringBoot不同平台的配置规则
1. 必须有主配置文件:application.xxx(后缀:.properties或.yml)
2. 不同配置平台的配置文件(不同平台都有自己的配置文件)。
名称为:application-xxx(xxx的内容自己设定).xxx(后缀)
举个例子:
开发环境的配置文件,里面设置了6666端口
测试环境的配置文件里面设置了7777端口
生产环境的配置文件里面设置了8888端口
此时如我们想使用某一个环境下的内容,就在主配置文件里面输入如下:
spring:profiles:active: prod(文件application-xxx里面的xxx)
执行如下:如果正确输出就是8888端口
更多的系统配置属性
Common Application Properties