目录
2.4 application.properties读取数据
2.4.3 @ConfigurationProperties批量注⼊
2.1 SpringBoot默认加载配置
SpringBoot全局配置⽂件可以对⼀些默认配置进⾏修改。SpringBoot除了⽀持properties格式的配置⽂件,还⽀持另外两种格式的配置⽂件。分别如下:
- application.properties
- application.yml
- application.yaml
这两个配置⽂件使我们SpringBoot启动的时候会默认加载的配置⽂件。
配置⽂件放在src/main/resources⽬录或者类路径/config下,这个配置⽂件的路径是有优先级的,⾄于优先级后⾯再说。
- application.properties(properties格式)
server.port=80
- application.yml(yml格式 推荐)
server:
port: 81
- application.yaml(yaml格式)
server:
port: 82
yml格式和yaml格式除了⽂件名后缀不⼀样,格式完全⼀样,是这样的,yml和yaml⽂件格式就是⼀模⼀样的,只是⽂件后缀不同,所以可以合并成⼀种格式来看 。 port: 82值与冒号之间有一个空格
注意:
1. 配置⽂件间的加载优先级 properties(最⾼)> yml > yaml(最低)
2. 不同配置⽂件中相同配置按照加载优先级相互覆盖,不同配置⽂件中不同配置全部保留
2.2 yaml⽂件
YAML全称 YAML Ain`t Markup Language,是⼀种可读性⾮常⾼的数据格式。YAML相对于XML等标记语⾔来说,不再以标记为语⾔重点,⽽是紧紧围绕数据来组织结构化格式。
后缀可以是 .yaml 或者 .yml , 我们通常使⽤的是.yml
xml格式
<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
yaml格式:
spring:
# 数据源配置
datasource:
ds1: #数据源1
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://ip:3306/db1 #数据源地址
username: root # ⽤户名
password: root # 密码
ds2: # 数据源2
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://ip:3307/db2#数据源地址
username: root # ⽤户名
password: root # 密码
YAML语法
(1)通常,约定YAML⽂件的后缀为yaml或yml
(2)YAML中,数据的⼤⼩写敏感
(3)YAML使⽤空格来缩进,缩进空格数不做严格要求,同⼀级缩进的数据左对⻬即可。
(4)YAML⽀持字⾯量、对象、数组三种数据类型
(5)YAML格式中使⽤ # 表示注释
Yaml数据结构
Yaml⽂件⽀持三种数据结构:
1、字⾯量:普通的值(数字,字符串,布尔)
key: value:字⾯直接来写;
字符串默认不⽤加上单引号或者双引号;
"":双引号;会转义字符串⾥⾯的特殊字符;特殊字符会作为本身想表示的意思
name: "李⻘ \n 亚索":输出:李⻘ 亚索
'':单引号;不会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据
name: ‘李⻘ \n 亚索’:输出:李⻘ \n 亚索
2、对象:key-value键值对的集合
key: value:在下⼀⾏来写对象的属性和值的关系,需要进⾏缩进
对象还是key: value的⽅式
friends:
lastName: zhangsan
age: 20
⾏内写法
friends: {lastName: zhangsan,age: 18}
3、数组:⼀组按次序排列的值(List、Set):
使⽤- 值表示数组中的⼀个元素
pets:
- cat
- dog
- pig
数组⾏内写法:
pets: [cat,dog,pig]
2.3 yaml读取数据
读取单个配置⽂件数据
yaml中保存的单个数据,可以使⽤Spring中的注解直接读取,使⽤@Value可以读取单个数据,
属性名引⽤⽅式:@Value("${⼀级属性名.⼆级属性名……}")
读取全部配置⽂件数据
SpringBoot提供了⼀个对象,能够把所有的数据都封装到这⼀个对象中,这个对象叫做Environment,使⽤⾃动装配注解可以将所有的yaml数据封装到这个对象中
数据封装到了Environment对象中,获取属性时,通过Environment的接⼝操作进⾏,具体⽅法时getProperties(String),参数填写属性名即可
总结
1. 使⽤Environment对象封装全部配置信息
2. 使⽤@Autowired⾃动装配数据到Environment对象中
读取对象数据
SpringBoot也提供了可以将⼀组yaml对象数据封装⼀个Java对象的操作
⾸先定义⼀个对象,并将该对象纳⼊Spring管控的范围,也就是定义成⼀个bean,然后使⽤注解@ConfigurationProperties指定该对象加载哪⼀组yaml中配置的信息。
这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名⼀⼀对应啊,不然没法封装。其实以后如果你要定义⼀组数据⾃⼰使⽤,就可以先写⼀个对象,然后定义好属性,下⾯到配置中根据这个格式书写即可。
2.4 application.properties读取数据
读取配置⽂件数据的读取⽅式是⼀样的,不管我们⽤的是yaml还是application.properties, UserDataSource实体类属性,还必须在程序中注⼊这些配置属性⽅可⽣效。
2.4.1 属性注⼊常⽤注解
@Configuration:声明⼀个类作为配置类
@Bean:声明在⽅法上,将⽅法的返回值加⼊Bean容器
@Value:属性注⼊
@ConfigurationProperties(prefix = "jdbc"):批量属性注⼊
@PropertySource("classpath:/jdbc.properties")指定外部属性⽂件,在类上添加
2.4.2 @Value属性值注⼊
1.引⼊数据源连接依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> </dependency>
2.application.properties添加信息
jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/afx?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=root
3.配置数据源
创建JdbcConfiguration类: 使⽤spring中的value注解对每个属性进⾏注⼊,⽤bean注解将返回值添加到容器中
@Configuration
public class JdbcConfiguration {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
2.4.3 @ConfigurationProperties批量注⼊
新建JdbcProperties,⽤来进⾏属性注⼊:
@Component
@ConfigurationProperties(prefix = "jdbc") //这⾥需要定义出在application⽂件中定义属性值得前缀信息
public class JdbcProperties {
private String url;
private String driverClassName;
private String username;
private String password;
// 注:要⽣成属性的set⽅法
}
注:添加@ConfigurationProperties注解后有警告:springboot 配置注释处理器未配置(编写配置⽂件此时⽆提示)
添加spring-boot-configuration-processor后出现提示,加完依赖后通过Ctrl+F9来使之⽣效
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>