1 背景
在实际的项目开发中,我们同一套程序需要运行在不同的环境中,例如:测试环境、开发环境、生产环境每个环境需要连接特定的数据库、MQ、redis等。
2 引入
springboot引入了profile,可以实现不同环境下配置参数的切换
2.1 应用场景
- 区分测试、开发、生产环境
- 区分同一套程序不同的特殊需求,例如同一套CRM系统需要在不同省份对接不同的ERP接口
- 不同的环境打印不同的日志
- 使用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,启动后查看打印的日志即可验证
网友评论