美文网首页Springboot
A.6 springboot profile

A.6 springboot profile

作者: 成长的键盘手 | 来源:发表于2018-02-11 16:19 被阅读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,启动后查看打印的日志即可验证

    相关文章

      网友评论

        本文标题:A.6 springboot profile

        本文链接:https://www.haomeiwen.com/subject/jjtltftx.html