我遇到的问题是:通过 spring.profiles.active=development 在 application.properties 中定义的活动配置文件。但是,当我将 Spring 的环境变量用于 getActiveProfiles() 时,返回的只是一个空字符串数组。该应用程序启动时显示“以下配置文件处于活动状态:开发”。感谢对此的任何帮助。下面是一个简单的类,用于检查我是否可以检索配置文件。已经尝试自动装配环境变量无济于事。此类标有@Component 并实现了EnvirontmentAware。注意:我已经查看了几乎所有关于此问题的 SO 线程,所以请不要将其标记为欺骗,因为没有一个解决了我的问题。@Overridepublic void setEnvironment(Environment environment) { this.environment = environment; System.out.println(environment.getActiveProfiles()[0]);}当然,我们得到一个索引越界异常。application.properties(一些由于敏感信息而省略)spring.profiles.active=development主要类别:@SpringBootApplication@PropertySource("classpath:application.properties")@ComponentScan("uk.co.demo*")@Configurationpublic class EbecsIntegrationAdapterApplication {@Value("${activemq.broker_url}") private String amqBrokerUrl;@Value("${activemq.username}") private String amqUsername;@Value("${activemq.password}") private String amqPassword;@Value("${server.ssl.key-store}") private String amqKeystore;@Value("${server.ssl.key-store-password}") private String amqKeyStorePassword;@Beanpublic ConnectionFactory activemqConnectionFactory() throws Exception { ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(); connectionFactory.setBrokerURL(this.amqBrokerUrl + "? jms.prefetchPolicy.all=1"); connectionFactory.setUserName(this.amqUsername); connectionFactory.setPassword(this.amqPassword); connectionFactory.setTrustAllPackages(true); connectionFactory.setTrustStore(this.amqKeystore); connectionFactory.setTrustStorePassword(this.amqKeyStorePassword); connectionFactory.setKeyStore(this.amqKeystore); connectionFactory.setKeyStorePassword(this.amqKeyStorePassword); return new PooledConnectionFactory(connectionFactory);}
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
假设EbecsIntegrationAdapterApplication和TestEnv在同一个包中
省略不需要的注释 @SpringBootApplication已经是一个@Configuration组件,已经加载了你的 application.properties 并且已经是一个@ComponentScan
如果您需要扫描额外的包裹,您不应该在包裹名称的末尾添加 *。最好是坚持使用引导结构化代码的最佳实践
@SpringBootApplication
public class EbecsIntegrationAdapterApplication {
new TestEnv()在 main(args) 中删除
Environment通过构造函数注入自动装配
@Component
public class TestEnv {
private Environment environment;
public TestEnv(Environment environment) {
this.environment = environment;
printEnvs();
}
public void printEnvs() {
System.out.println(environment.getActiveProfiles()[0]);
}
}
添加回答
举报
0/150
提交
取消