配置文件简介
1、Springboot使用一个全局的配置文件(文件名是固定的):
(1)application.properties
(2)application.yml
2、yml是YAML(YAML Ain't Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件。
springboot的properties类型配置文件
properties文件是java中很常用的一种配置文件,其语法结构为“键=值”的格式,可以用“#”作为注释。
1、application.properties
在Springboot中,使用IDEA创建工程自带的就是一个application.properties文件。比如最常见的web项目的启动端口的配置,Springboot创建的web项目默认为8080端口,现在将端口修改为8888。
server.port=8888
还有对模板引擎的配置等,都可以在application.properties中配置。
2、 jdbc.properties
java应用通过JDBC连接数据库时,可以把数据库的配置写在配置文件 jdbc.properties中,这样就可以通过加载properties配置文件来连接数据库,达到深层次的解耦目的。如:
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/test
user=root
password=123456
如果想要换成oracle或是DB2,只需要修改配置文件即可,不用修改任何代码就可以更换数据库。
springbooot的yml类型配置文件
application.yml默认创建工程的时候不是自带的,需要我们手动创建出来,application.yml的写法类似树形结构。
1、基本语法
k:(空格)v——表示一对键值对(空格必须有),键和值大小写敏感;
以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的。如:
server:
port: 8888
path: /index
2、字面量:普通的值(数字,字符串,布尔)
字符串默认不用加上单引号或者双引号;
用双引号:
name: "a \n b"
输出:
a
b
用单引号:
name: 'a \n b'
输出:
a \n b
3、对象、Map(属性和值)(键值对)
friends:
name: zhangsan
age: 20
#行内写法
friends: {name: zhangsan,age: 20}
4、数组(List、Set)
#用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
#行内写法
pets: [cat,dog,pig]
读取application.yml配置文件的数据
先配置 application.yml
user:
name: xxx
age: 20
birth: 2020/06/03
maps: {k1: v1,k2: 12}
lists:
- aaa
- bbb
dog:
name: yyy
age: 1
1、使用@ConfigurationProperties读取
在bean层建个User类
@Component //将User类注册到容器中
@ConfigurationProperties(prefix = "user") //告诉Springboot将user中的所有属性和配置文件中相关的配置进行绑定、映射
public class User {
private String name;
private Integer age;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//相应的getter、setter
}
2、使用@Value读取
直接在controller层使用
@RestController
public class TestController {
@Value("${user.name}")
private String userName;
@Value("${user.age}")
private Integer userAge;
······
}
3、@Value获取值和@ConfigurationProperties获取值比较
@Value是以前spring底层的,使用@Value需要一个一个参数指定,而@ConfigurationProperties有批量注入配置文件中的属性。
在项目启动时添加配置参数
项目使用maven编译打包成jar文件,然后使用如下jar命令运行项目并且指定服务器端口
java -jar springbootdemo-0.0.1-SNAPSHOT.jar --server.port=8080
!注意:
(1)当同时存在application.yml和application.properties文件,并且它们里面有相同配置项时,application.properties的优先级更高。
(2)使用application.properties配置,@Value中的值可以在IDEA工具中通过ctrl+鼠标左键进行定位跳转,而yml不能。
(3)启动项目时动态配置的优先级要高于配置文件中的配置项。