说说如何配置 Spring Boot 属性文件

SpringBoot 自动配置 Bean 提供了 300 多个用于微调的属性,而且能从多种属性源中获得属性值。属性源优先级排序如下:

  1. 命令行参数
  2. java:comp/env 里的 JNDI 属性
  3. JVM 系统属性
  4. 操作系统环境变量
  5. 打包在应用程序内的 application.properties 或者 appliaction.yml 文件
  6. 通过 @PropertySource 标注的属性源
  7. 默认属性

高优先级属性源所设置的属性会覆盖低优先级的相同属性。例如,命令行参数会覆盖 appliaction.yml 文件里所配置的属性。

我们一般使用 application.properties 或 application.yml 文件,来配置 Spring Boot。这两个配置文件可放置于以下位置,优先级排序如下:

  1. 在相对于应用程序运行目录的 /config 子目录内。
  2. 在应用程序运行的目录内。
  3. 在 config 包内 。
  4. 在 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 文件,内容如下:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                  %d{HH:mm:ss.SSS} {%thread} [%level] %logger{50} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

这里定义了一个把日志写入控制台的 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 中按照以下优先级顺序进行选择:

  1. Tomcat 的连接池 DataSource;
    2 HikariCP;
  2. CommonsDBCP;
  3. CommonsDBCP 2 。

HikariCP 是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常快。根据官方提供的数据,在 i7 ,开启 32 个线程 32 个连接的情况下,进行随机数据库读写操作, HikariCP 的速度是现在常用的 C3P0 数据库连接池的数百倍。

也可以在此设置 JNDI 数据源,形如:

spring:
datasource:
jndi-name: java:/comp/env/jdbc/xxx
发布了626 篇原创文章 · 获赞 705 · 访问量 91万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/104135696