View on GitHub

spring-boot-in-action

Spring Boot 实战笔记

自动配置微调

禁用模板缓存

默认情况下,除非重启应用程序,否则对 Thymeleaf 模板的变更是不会生效的。

这是因为 Thymeleaf 模板默认缓存。

这有助于改善应用程序的性能,因为模板只需编译一次,但在开发过程中就不能实时看到变更的效果了。

将 spring.thymeleaf.cache 设置为 false 就能禁用 Thymeleaf 模板缓存。

spring.thymeleaf.cache=false

一定要确保这个文件不会发布到生产环境,否则生产环境里的应用程序就无法享受模板缓存带来的性能提升了。

Spring Boot支持的其他模板也能关闭模板缓存,设置这些属性就好了:

配置嵌入式服务器

监听端口

修改嵌入式的服务器(默认是Tomcat)监听端口:

server.port=8000

提供HTTPS服务

用 JDK 的 keytool 工具来创建一个密钥存储(keystore):

keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA

application.properties 配置:

server.port=8000
server.ssl.key-store=mykeys.jks
server.ssl.key-store-password=springboot
server.ssl.key-password=springboot

application.yml 配置:

server:
  port: 8000
  ssl:
    key-store: mykeys.jks
    key-store-password: springboot
    key-password: springboot

key-store 配置:

配置日志

默认情况下,Spring Boot会用Logback(http://logback.qos.ch)来记录日志,并用 INFO 级别输出到控制台。

用其他日志实现替换Logback

如果决定使用Log4j或者Log4j2,那么你只需要修改依赖,引入对应该日志实现的起步依赖,同时排除 Logback。

Maven中排除掉根起步依赖传递引入的默认日志起步依赖,这样就能排除Logback:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

排除默认日志的起步依赖后,就可以引入你想用的日志实现的起步依赖了。

在Maven里添加Log4j:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

在Maven里添加Log4j2:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

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] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <logger name="root" level="INFO"/>
    <root level="INFO">
    	<appender-ref ref="STDOUT" />
    </root>
</configuration>

自定义日志配置

如果想要完全掌控日志配置,但是又不想用logback.xml作为Logback配置的名字,可以通过 logging.config 属性指定自定义的名字:

logging:
  config:
    classpath:logging-config.xml

设置日志级别

创建以 logging.level 开头的属性,后面是要日志名称。

如果根日志级别要设置为 WARN ,但Spring Security的日志要用 DEBUG 级别,可以在application.yml里加入以下内容:

logging:
  level:
    root: WARN
    org:
      springframework:
        security: DEBUG
logging:
  level:
    root: WARN
    org.springframework.security: DEBUG

写入日志文件

假设你想把日志写到位于/var/logs/目录里的BookWorm.log文件里。

使用 logging.path 和 loggin.file 属性就行了:

logging:
  path: /var/logs/
  file: BookWorm.log
logging.path=/var/logs/
logging.file=BookWorm.log

默认情况下,日志文件的大小达到10MB时会切分一次。

配置数据源

配置MySQL数据库:

spring:
  datasource:
    url: jdbc:mysql://localhost/readinglist
    username: dbuser
    password: dbpass

自定义驱动

通常你都无需指定JDBC驱动,Spring Boot会根据数据库URL识别出需要的驱动。

 spring.datasource.driver-class-name=com.mysql.jdbc.Driver