1 背景
在實際的項目開發(fā)中,我們同一套程序需要運行在不同的環(huán)境中潜圃,例如:測試環(huán)境缸棵、開發(fā)環(huán)境、生產(chǎn)環(huán)境每個環(huán)境需要連接特定的數(shù)據(jù)庫谭期、MQ堵第、redis等。
2 引入
springboot引入了profile隧出,可以實現(xiàn)不同環(huán)境下配置參數(shù)的切換
2.1 應用場景
- 區(qū)分測試踏志、開發(fā)、生產(chǎn)環(huán)境
- 區(qū)分同一套程序不同的特殊需求胀瞪,例如同一套CRM系統(tǒng)需要在不同省份對接不同的ERP接口
- 不同的環(huán)境打印不同的日志
- 使用maven在不同的環(huán)境打不同的包
3 通過profile使用不同的配置文件
3.1 創(chuàng)建多個配置文件
在src/main/java下創(chuàng)建多個配置文件针余,命名application-{profile}.properties,如下:
application-test.properties
application-dev.properties
application-prod.properties
為了測試加載不同的配置凄诞,我們在每個配置文件中配置不同的端口
3.2 測試加載不同的環(huán)境
方法一:在application.properties中設置加載的profile
#加載開發(fā)環(huán)境下的配置文件
spring.profiles.active=dev
方法二:啟動時加載
java -jar xxx.jar -spring.profiles.active=dev
使用上述方法中的任意一種圆雁,即可實現(xiàn)加載不同的配置文件
4 通過profile使用不同的接口實現(xiàn)類
4.1 創(chuàng)建接口
public interface MessageService {
String getMessage();
}
4.2 創(chuàng)建實現(xiàn)類
@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 創(chuàng)建測試類
@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章節(jié)中的方法可以測試加載不同profile,啟動后查看打印的日志即可驗證
5 通過profile打印不同的日志(logback)
5.1 logback-spring.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--開發(fā)環(huán)境的日志配置-->
<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>
<!--生產(chǎn)環(huán)境的日志配置-->
<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章節(jié)中的方法可以測試加載不同profile帆谍,啟動后查看打印的日志即可驗證