SpringBoot 自动配置 Bean 提供了 300 多个用于微调的属性,而且能从多种属性源中获得属性值。属性源优先级排序如下:
- 命令行参数
- java:comp/env 里的 JNDI 属性
- JVM 系统属性
- 操作系统环境变量
- 打包在应用程序内的 application.properties 或者 appliaction.yml 文件
- 通过 @PropertySource 标注的属性源
- 默认属性
高优先级属性源所设置的属性会覆盖低优先级的相同属性。例如,命令行参数会覆盖 appliaction.yml 文件里所配置的属性。
我们一般使用 application.properties 或 application.yml 文件,来配置 Spring Boot。这两个配置文件可放置于以下位置,优先级排序如下:
- 在相对于应用程序运行目录的 /config 子目录内。
- 在应用程序运行的目录内。
- 在 config 包内 。
- 在 Classpath 根目录内。
我们以 application.yml 配置文件为例。
1 禁用 Thymeleaf 模板缓存
因为 Thymeleaf 模板默认是开启缓存,这样模板只需编译一次,这有助于改善应用程序性能。但在开发模式下,就无法实时看到模板变更的效果咯。
修改 application.yml 配置文件:
spring:
thymeleaf:
# 禁用 thymeleaf 缓存
cache: false
注意: 这个禁用 Thymeleaf 模板缓存的配置,只在开发环境有效(可以利用 profile 实现)。
此方法也可以禁用其它模板(freemarker 、groovy )缓存:
spring:
...
freemarker:
# 禁用 freemarker 缓存
cache: false
groovy:
template:
# 禁用 groovy 模板缓存
cache: false
2 修改 Tomcat 端口号
运行 SpringBoot 应用程序时,程序会启动一个嵌入式 Tomcat 服务器,默认监听 8080 端口。
我们可以设置 server.port 属性,让其监听不同的端口:
server:
port: 8100 # 设置服务器端口号
注意: yml 格式中冒号后面必须带有空格,否则无法正确获取属性值!
3 配置 HTTPS 服务
具体可参见 https://blog.csdn.net/deniro_li/article/details/104125612
4 配置 Log4j2 日志
SpringBoot 默认会使用 Logback来记录日志,并将 INFO 级别的日志输出到控制台。我们可以引入 Log4j2 日志实现的起步依赖,同时排除掉 Logback 依赖。
以 gradle 为例,编辑 build.gradle 文件:
configurations {
//排除默认日志
compile.exclude module:'spring-boot-starter-logging'
}
dependencies {
...
//引入 log4j2 日志
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
...
}
5 修改 logback 日志
5.1 logback.xml 文件
可以在 Classpath 的根目录( src/main/resources )下创建 logback.xml 文件,内容如下:
%d{HH:mm:ss.SSS} {%thread} [%level] %logger{50} - %msg%n
这里定义了一个把日志写入控制台的 appender。日志格式写在 pattern 节点内。
日志格式 | 说明 | 示例 |
---|---|---|
%d{HH:mm:ss.SSS} | 时间,不包含日期 | 11:49:03.742 |
%thread | 产生日志事件的线程名称 | restartedMain |
%level | 日志级别 | DEBUG |
%logger | 产生日志事件的类名,可带 length 参数,用于缩写那些太长的带包名的完整类名。注意:即使 length 为 0,最右边的类名也不会被缩写;而其它包名最多被缩写为1个字符。 | %logger{50},所对应的示例为:o.s.s.w.access.intercept.FilterSecurityInterceptor。 |
%msg | 需要打印的具体说明 | Validated configuration attributes |
%n | 换行符 | - |
还定义了一个 root,它是一个 name 为 root 的 logger,将其日志打印级别设定为 INFO。root 可以包含多个 appender-ref 节点,也就是说,可以指定多个日志输出策略,比如同时输出日志到控制台和文件。
5.2 application.yml 文件
我们还可以在 application.yml 中,修改 logback 日志相关内容。
比如修改 root 日志级别或者修改某个组件的日志级别:
logging:
level:
# 根日志级别
root: info
# 开启 debug 模式
org.springframework.security: debug
这里把 Spring Security 的日志级别定义为 debug。
6 配置数据源
通过在 application.yml 中配置数据库的 URL 和身份信息,我们以 MySQL 数据库为例:
spring:
datasource:
url: jdbc:mysql://localhost/xxx?serverTimezone=Asia/Shanghai
username: xxx
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
其实无需指定 JDBC 驱动, SpringBoot 会根据数据库的 URL 地址,自动识别出所需要的驱动哦๑乛◡乛๑
连接池方面,SpringBoot 会在 Classpath 中按照以下优先级顺序进行选择:
- Tomcat 的连接池 DataSource;
2 HikariCP; - CommonsDBCP;
- CommonsDBCP 2 。
HikariCP 是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常快。根据官方提供的数据,在 i7 ,开启 32 个线程 32 个连接的情况下,进行随机数据库读写操作, HikariCP 的速度是现在常用的 C3P0 数据库连接池的数百倍。
也可以在此设置 JNDI 数据源,形如:
spring:
datasource:
jndi-name: java:/comp/env/jdbc/xxx