Springboot

A.6 springboot profile

2018-02-11  本文已影响64人  成长的键盘手

1 背景

在实际的项目开发中,我们同一套程序需要运行在不同的环境中,例如:测试环境、开发环境、生产环境每个环境需要连接特定的数据库、MQ、redis等。

2 引入

springboot引入了profile,可以实现不同环境下配置参数的切换

2.1 应用场景

  1. 区分测试、开发、生产环境
  2. 区分同一套程序不同的特殊需求,例如同一套CRM系统需要在不同省份对接不同的ERP接口
  3. 不同的环境打印不同的日志
  4. 使用maven在不同的环境打不同的包

3 通过profile使用不同的配置文件

3.1 创建多个配置文件

在src/main/java下创建多个配置文件,命名application-{profile}.properties,如下:

application-test.properties
application-dev.properties
application-prod.properties

为了测试加载不同的配置,我们在每个配置文件中配置不同的端口

3.2 测试加载不同的环境

方法一:在application.properties中设置加载的profile

#加载开发环境下的配置文件
spring.profiles.active=dev

方法二:启动时加载

java -jar xxx.jar -spring.profiles.active=dev

使用上述方法中的任意一种,即可实现加载不同的配置文件

4 通过profile使用不同的接口实现类

4.1 创建接口

public interface MessageService {
  String getMessage();
}

4.2 创建实现类

@Component
@Profile({"dev"})
public class DevService implements MessageService{

  public String getMessage() {
    return "dev profile message";
  }

}

@Component
@Profile({"prod"})
public class ProdService implements MessageService{

  public String getMessage() {
    return "prod profile message";
  }

}

4.3 创建测试类

@SpringBootApplication
public class FirstRunning implements CommandLineRunner {
  
  private static final Logger logger = LoggerFactory.getLogger(FirstRunning.class);

  @Autowired
  private MessageService messageService;

  @Override
  public void run(String... args) {
    logger.info(this.messageService.getMessage());
  }
}

4.4 测试接口

使用3.2章节中的方法可以测试加载不同profile,启动后查看打印的日志即可验证

5 通过profile打印不同的日志(logback)

5.1 logback-spring.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--开发环境的日志配置-->
    <springProfile name="dev">
        <logger name="pers.mateng" level="DEBUG" />
        <appender name="logfile" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} : %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>

    <!--生产环境的日志配置-->
    <springProfile name="prod">
        <logger name="pers.mateng" level="ERROR" />
        <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>log/server.log</File>
            <rollingPolicy
                    class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>log/server_%d{yyyy-MM-dd}.log.zip</FileNamePattern>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} : %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>

    <root level="info">
        <appender-ref ref="logfile" />
    </root>

</configuration>

5.2 测试日志

使用3.2章节中的方法可以测试加载不同profile,启动后查看打印的日志即可验证

上一篇 下一篇

猜你喜欢

热点阅读