1.Spring Boot 配置文件:
不管是通过官方提供的方式获取 Spring Boot 项目,还是通过 IDEA 快速的创建 Spring Boot 项目,我们都会发现在 resource 有一个配置文件 application.properties,也有可能是application.yml.这个文件也就是 Spring Boot 的配置文件。
YAML 语法规则:
1.缩进表示层级
2.大小写敏感
3.缩进只能使用空格
4.空格的数量不重要,但是相同层级的元素要左侧对齐
“#” 表示开头的行表示注释
YAML 支持的数据结构:
1.单纯的变量,不可再分的单个的值,如数字,字符串等。
name: abc
age: 12
# ~表示NULL值
email: ~
# 多行字符串可以使用|保留换行符,也可以使用>折叠换行。
# +表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
message:|-
Hello world
2.对象,键值对的集合。
lang:
- java
- golang
- c
# 或者行内写法
lang:[java,golang,c]
3.数组,一组按次序排列的值。
person:
name:abc
age:20
# 或者行内写法
person:{name:Darcy,age:20}
使用 YAML 支持的三种数据结构通过组合可以形成复杂的复合结构。
#WEB Configuration
spring:
application:
name: boot
profiles: default
mvc:
view:
prefix: /WEB-INF/pages
suffix: .jsp
devtools:
restart:
#热部署生效
enabled: false
#设置重启的目录
#additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启
exclude: WEB-INF/**
# HTTP response compression (GzipFilterProperties)
http:
gzip:
min-gzip-size: 10k
deflate-compression-level: 2
buffer-size: 50k
encoding:
charset: UTF-8
enabled: true
#DB Configuration:
datasource:
first:
jdbc-url: jdbc:mysql://xx.xx.xx.xx:3306/xxxxdb?useUnicodex=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
username: xxxx
password: xxxx
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Druid Configuration Druid管理界面:http://ip:port/druid/index.html;用户名和密码即数据库用户名和密码
# 初始化大小,最小,最大
minIdle: 5
initialSize: 5
maxActive: 200
testOnBorrow: false
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
testOnReturn: false
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
logSlowSql: true
#orgsync DB Configuration
#second:
#jdbc-url: jdbc:oracle:thin:@xx.xxx.x.xxx:xxxx/ora11g
#username: xxxxxxx
#password: xxxxxxx
#driver-class-name: oracle.jdbc.driver.OracleDriver
#type: com.alibaba.druid.pool.DruidDataSource
#minIdle: 5
# initialSize: 5
#maxActive: 200
#maxWait: 60000
#Redis Configuration
#redis:
#database: 14
#host: xx.xxx.x.xxx
#port: 6379
#password: xxxx_xxxx
#timeout: 20000
#pool:
#max-active: 8
#max-wait: -1
#max-idle: 8
#min-idle: 0
#Server Configuration
server:
port: 7777
tomcat:
uri-encoding: UTF-8
#logging:
#config: classpath:logback-spring.xml
#level.root: debug
2. Properties 文件
properties 配置文件简单好用,在各种配置环境里都可以看到它的身影,它简单易用,但是在配置复杂结构时不如YAML 优雅美观。同样拿上面的 YAML 的复合结构举例,演示同样的配置在 properties文件中的写法。
local.url=jdbc:mysql://localhost:3306/xxxxdb?useUnicodex=true&characterEncoding=utf8
local.username=xxxx
local.password=xxxx
local.driverClassName=com.mysql.jdbc.Driver
#初始化连接大小
local.initialSize=10
#连接池最大使用连接数量
local.maxActive=80
#连接池最小空闲
local.minIdle=7
#获取连接最大等待时间
local.maxWait=60000
local.checkoutTimeout=3000
3. 随机数与占位符
RandomValuePropertySource 类对于注入随机值很有用(例如,注入秘密或测试用例)。它可以生成整数,长整数,uuid 或字符串等,通过 Spring Boot 对我们的封装,我们可以轻松的使用。
占位符允许在配置的值中引用之前定义过的变量。
#chart的default默认主题
pie-default-tooltip-trigger = item
pie-default-tooltip-formatter = {a} <br/>{b} : {c} ({d}%)
pie-default-legend-orient = vertical
pie-default-legend-left = left
pie-default-series-radius = 55%
pie-default-series-center = 50%,60%
pie-default-series-itemStyle = {"emphasis":{"shadowBlur":10,"shadowOffsetX":0,"shadowColor":"rgba(0, 0, 0, 0.5)"}}
radar-default-legend-orient = vertical
radar-default-legend-left = left
radar-default-series-areaStyle = {"normal":{"color":"rgba(60, 141, 188, 0.2)"}}
4. 配置的使用
不管是使用 YAML 还是 Properties 都可以进行配置文件的编写,但是还不知道具体的使用方式,通过下面的几个注解,可以让我们了解到这些配置的具体使用方式。
在使用配置之前,添加所需依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 导入配置文件处理器,在配置相关文件时候会有提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4.1 注解Value的使用
@Value 支持直接从配置文件中读取值,同时支持 SpEL 表达式,但是不支持复杂数据类型和数据验证,下面是具体的使用。
package com.sckj.mmxtsb.common.constant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
*
* 系统常量
*
*@author lijun
*@date 2020年3月11日
*/
@Component
public class SystemValue {
public static String gysHmdUrl;
public static String cgxtUrl;
public static String reportUrl;
public static String cgxtGyspjUrl;
public static String cgxtGyspjMobileUrl;
public static String gysIndexUrl;
public static String ggUrl;
/**
* 直接从配置文件读取一个值
*/
@Value("${custom.last-name}")
private String lastName;
/**
* 支持SpEL表达式
*/
@Value("#{11*4/2}")
private Integer age;
@Value("${custom.url.reportUrl}")
public void setReportUrl(String reportUrl) {
SystemValue.reportUrl = reportUrl;
}
@Value("${custom.url.cgxtGyspj}")
public void setCgxtGyspjUrl(String cgxtGyspjUrl) {
SystemValue.cgxtGyspjUrl = cgxtGyspjUrl;
}
@Value("${custom.url.cgxtGyspjMobileUrl}")
public void setCgxtGyspjMobileUrl(String cgxtGyspjMobileUrl) {
SystemValue.cgxtGyspjMobileUrl = cgxtGyspjMobileUrl;
}
@Value("${custom.url.cgxtUrl}")
public void setCgxtUrl(String cgxtUrl) {
SystemValue.cgxtUrl = cgxtUrl;
}
@Value("${custom.url.gysHmdUrl}")
public void setGysHmdUrl(String gysHmdUrl) {
SystemValue.gysHmdUrl = gysHmdUrl;
}
@Value("${custom.url.gysIndexUrl}")
public void setGysIndexUrl(String gysIndexUrl) {
SystemValue.gysIndexUrl = gysIndexUrl;
}
@Value("${custom.url.ggUrl}")
public void setGgUrl(String ggUrl) {
SystemValue.ggUrl = ggUrl;
}
}
4.2 注解ConfigurationProperties的使用
@ConfigurationProperties 注解是 Spring Boot 提供的一种使用属性的注入方法。不仅可以方便的把配置文件中的属性值与所注解类绑定,还支持松散绑定,JSR-303 数据校验等功能。以上面演示的 Properties 的配置为例演示 @ConfigurationProperties 注解的使用。
package com.sckj.mmxtsb.common.constant;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.hibernate.validator.constraints.Email;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
/**
* <p>
* @Author lijun
* @Date 2018/12/6 22:54
*/
@Component
@ConfigurationProperties(prefix = "custom")
@Validated
public class SystemValue {
private String lastName;
private Integer age;
private Date birth;
private Map<String, String> maps;
private List<String> lists;
/**
* 支持数据校验
*/
@Email
private String email;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, String> getMaps() {
return maps;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
public List<String> getLists() {
return lists;
}
public void setLists(List<String> lists) {
this.lists = lists;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Component 自动添加 bean 到 spring 容器中。
@ConfigurationProperties 告诉这个类的属性都是配置文件里的属性,prefix 指定读取配置文件的前缀。
网友评论