Spring Boot 常用配置简单介绍及使用

多环境配置

Spring Boot Profile

在 Spring Boot 中多环境配置文件名需要满足 application-{profile}.properties 的格式,其中 {profile} 对应环境标识

  • application-dev.properties 开发环境
  • application-test.properties 测试环境
  • application-prod.properties 生产环境

在 application.properties 文件中通过 spring.profiles.active 属性来设置,其值对应 {profile} 值。比如:

spring.profiles.active=dev

Spring Boot 在启动时会加载 application-dev.properties 配置文件

Maven Profile

如果我们使用的构建工具是 Maven,也可以通过 Maven 的 Profile 特性来实现多环境配置以及打包。这样做的好处是我们不需要每次打包的时候改变 spring.profiles.active 的值,打包的时候 mvn clean package -P ${profile} 使用 -P 参数指定

pom.xml 配置如下:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <!-- 开发启动 Spring Boot 时默认加载 application-dev.properties -->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>application-dev.properties</exclude>
                <exclude>application-test.properties</exclude>
                <exclude>application-prod.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>application.properties</include>
                <include>application-${profileActive}.properties</include>
            </includes>
        </resource>
    </resources>
</build>

application.properties 配置文件如下

## profile (dev,test,prod) default dev
spring.profiles.active=@profileActive@

日志配置

Spring Boot 使用 Commons Logging 进行日志记录,但保留底层日志实现(Java Util Logging, Log4J2 and Logback),默认使用 Logback 作为底层实现。

日志常用配置

## Logback 日志级别 ERROR, WARN, INFO, DEBUG or TRACE
logging.level.com.renguangli.config=debug
logging.level.org.springframework.web=info

## 日志文件名称 相对或绝对路径
logging.file=./logs/springboot.log
## 控制台日志格式
# logging.pattern.console=
## 日志文件格式
# logging.pattern.file=

除了在 application.properties 文件中配置日志外还可以使用 xml 配置文件格式。对于 Logback 日志框架来说 Spring Boot 默认加载文件为名为 logback-spring.xml, logback.xml 的配置文件,log4j2 默认加载 log4j2-spring.xml or log4j2.xml 的配置文件。当让也可以使用如下配置指定:

logging.config=classpath:logback.xml

下面是一个完整的 Logback 日志配置文件

下面是一个完整的 log4j2 日志配置文件

自定义配置

@Value

config.name=hello
config.value=world

对于像上面的自定义配置我们可以这样使用

@Value("${config.name}")
private String name;

@Value("${config.value}")
private String value;

一两个配置的话还好,一旦配置多起来就比较难看,对于这种情况我们可以使用 Spring Boot 提供的 @ConfigurationProperties 注解来简化配置

配置类

@Component
@ConfigurationProperties(prefix = "config")
public class ConfigProperties {

    private String name;

    private String value;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

如何使用呢?

@Autowired
private ConfigProperties configProperties;

自定义配置自动提示

在 pom.xml 文件中添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

第二步我们需要配置META-INF/spring-configuration-metadata.json文件来描述。为了方便我们可以通过 idea 自动生成。

在 idea 设置中搜索 Annotation Processors,接下来勾住 Enable annonation processing 就完成了。

我们可以在编译后的文件中看到自动生成的spring-configuration-metadata.json。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfdIS8Iy-1589785423191)(https://renguangli.com/images/spring-boot/spring-boot-metadata.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6dd3wEk-1589785423194)(https://renguangli.com/images/spring-boot/spring-boot-config.jpg)]

参考资料

boot-features-logging

示例代码在 Github 上地址:spring-boot-config