赞
踩
目录
2.4 application.properties读取数据
2.4.3 @ConfigurationProperties批量注⼊
SpringBoot全局配置⽂件可以对⼀些默认配置进⾏修改。SpringBoot除了⽀持properties格式的配置⽂件,还⽀持另外两种格式的配置⽂件。分别如下:
这两个配置⽂件使我们SpringBoot启动的时候会默认加载的配置⽂件。
配置⽂件放在src/main/resources⽬录或者类路径/config下,这个配置⽂件的路径是有优先级的,⾄于优先级后⾯再说。
server.port=80
server:
port: 81
server:
port: 82
yml格式和yaml格式除了⽂件名后缀不⼀样,格式完全⼀样,是这样的,yml和yaml⽂件格式就是⼀模⼀样的,只是⽂件后缀不同,所以可以合并成⼀种格式来看 。 port: 82值与冒号之间有一个空格
注意:
1. 配置⽂件间的加载优先级 properties(最⾼)> yml > yaml(最低)
2. 不同配置⽂件中相同配置按照加载优先级相互覆盖,不同配置⽂件中不同配置全部保留
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 # 密码
(1)通常,约定YAML⽂件的后缀为yaml或yml
(2)YAML中,数据的⼤⼩写敏感
(3)YAML使⽤空格来缩进,缩进空格数不做严格要求,同⼀级缩进的数据左对⻬即可。
(4)YAML⽀持字⾯量、对象、数组三种数据类型
(5)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]
yaml中保存的单个数据,可以使⽤Spring中的注解直接读取,使⽤@Value可以读取单个数据,
属性名引⽤⽅式:@Value("${⼀级属性名.⼆级属性名……}")
SpringBoot提供了⼀个对象,能够把所有的数据都封装到这⼀个对象中,这个对象叫做Environment,使⽤⾃动装配注解可以将所有的yaml数据封装到这个对象中
数据封装到了Environment对象中,获取属性时,通过Environment的接⼝操作进⾏,具体⽅法时getProperties(String),参数填写属性名即可
总结
1. 使⽤Environment对象封装全部配置信息
2. 使⽤@Autowired⾃动装配数据到Environment对象中
SpringBoot也提供了可以将⼀组yaml对象数据封装⼀个Java对象的操作
⾸先定义⼀个对象,并将该对象纳⼊Spring管控的范围,也就是定义成⼀个bean,然后使⽤注解@ConfigurationProperties指定该对象加载哪⼀组yaml中配置的信息。
这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名⼀⼀对应啊,不然没法封装。其实以后如果你要定义⼀组数据⾃⼰使⽤,就可以先写⼀个对象,然后定义好属性,下⾯到配置中根据这个格式书写即可。
读取配置⽂件数据的读取⽅式是⼀样的,不管我们⽤的是yaml还是application.properties, UserDataSource实体类属性,还必须在程序中注⼊这些配置属性⽅可⽣效。
@Configuration:声明⼀个类作为配置类
@Bean:声明在⽅法上,将⽅法的返回值加⼊Bean容器
@Value:属性注⼊
@ConfigurationProperties(prefix = "jdbc"):批量属性注⼊
@PropertySource("classpath:/jdbc.properties")指定外部属性⽂件,在类上添加
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> </dependency>
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
创建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;
- }
- }

新建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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。