【发布时间】:2021-11-06 18:06:21
【问题描述】:
我有一个 Spring Boot 应用程序,公司在其中开发了一个以最糟糕的方式开发的库(但我无法控制)。该库使用环境变量进行配置,因此必须声明这些环境变量以使应用程序在本地运行很烦人,假设它一直是这样的:
这是一个网络过滤器:
private void checkEnvironmentVariables() {
if (StringUtils.isBlank(System.getProperty(LibraryEnvConfNames.ENV_1)))
throw new Exception(System.getProperty(LibraryEnvConfNames.ENV_1));
if (StringUtils.isBlank(System.getProperty(LibraryEnvConfNames.ENV_2)))
throw new Exception(System.getProperty(LibraryEnvConfNames.ENV_2));
}
对于dev 和qa 环境没有问题,因为这些环境变量注入了一个已经配置的配置映射,但对于新开发人员和普通人来说,要在本地运行它非常烦人必须声明所有IntelliJ、Eclipse 等中的这些环境变量。
我试图在每个应用程序中创建一个配置 bean 类,在执行此代码之前,它将为本地开发注入随机属性(因为实际上对于本地开发,这些变量的值并不重要)。
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnExpression("'${spring.profiles.active}'.equals('local')")
public class LocalRequestFilterConfig {
private static final Logger LOGGER = LoggerFactory.getLogger( LocalRequestFilterConfig.class);
@Bean
public void inyectLocalEnvVariables(){
LOGGER.info( "Injecting local variables configuration" );
System.setProperty( "ENV_1","TEST" );
System.setProperty( "ENV_2","test" );
}
}
关键是我不知道如何管理这些 bean 初始化的顺序。我无法添加dependsOn,因为它来自外部库,并且我不知道如何在库中的过滤器初始化之前注入我的配置。
【问题讨论】:
标签: spring-boot configuration environment-variables javabeans