app.props 中定义的活动配置文件但是环境变量返回活动配置文件的空数组

我遇到的问题是:通过 spring.profiles.active=development 在 application.properties 中定义的活动配置文件。但是,当我将 Spring 的环境变量用于 getActiveProfiles() 时,返回的只是一个空字符串数组。该应用程序启动时显示“以下配置文件处于活动状态:开发”。感谢对此的任何帮助。下面是一个简单的类,用于检查我是否可以检索配置文件。


已经尝试自动装配环境变量无济于事。此类标有@Component 并实现了EnvirontmentAware。


注意:我已经查看了几乎所有关于此问题的 SO 线程,所以请不要将其标记为欺骗,因为没有一个解决了我的问题。


@Override

public 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*")

@Configuration

public 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;



@Bean

public 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);

}


繁星淼淼
浏览 77回答 1
1回答

冉冉说

假设EbecsIntegrationAdapterApplication和TestEnv在同一个包中省略不需要的注释 @SpringBootApplication已经是一个@Configuration组件,已经加载了你的 application.properties 并且已经是一个@ComponentScan如果您需要扫描额外的包裹,您不应该在包裹名称的末尾添加 *。最好是坚持使用引导结构化代码的最佳实践@SpringBootApplicationpublic class EbecsIntegrationAdapterApplication {new TestEnv()在 main(args) 中删除Environment通过构造函数注入自动装配@Componentpublic class TestEnv {  private Environment environment;  public TestEnv(Environment environment) {     this.environment = environment;     printEnvs();  }  public void printEnvs() {    System.out.println(environment.getActiveProfiles()[0]); }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java