为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2022-12-15 14:50:08
我遇到的问题是:通过 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]);

 }


}


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信