我遇到的问题是:通过spring.profiles.active = development在application.properties中定义的活动配置文件。但是,当我将Spring的Environment变量用于getActiveProfiles()时,返回的只是一个空的String数组。该应用程序将启动“以下配置文件处于活动状态:开发”。感谢任何帮助。下面是一个简单的类,用于检查是否可以检索个人资料。
已经尝试自动装配环境变量,但无济于事。此类标记有@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);
}
@Bean
public ActiveMQComponent activemqComponent(JmsTransactionManager
jmsTransactionManager, ConnectionFactory connectionFactory) {
ActiveMQComponent activeMQComponent = new ActiveMQComponent();
activeMQComponent.setTestConnectionOnStartup(true);
activeMQComponent.setTransacted(true);
activeMQComponent.setCacheLevelName("CACHE_CONSUMER");
activeMQComponent.setConnectionFactory(connectionFactory);
activeMQComponent.setTransactionManager(jmsTransactionManager);
return activeMQComponent;
}
@Bean
public JmsTransactionManager jmsTransactionManager(ConnectionFactory connectionFactory) {
return new JmsTransactionManager(connectionFactory);
}
@Bean
public SpringTransactionPolicy springTransactionPolicy(TransactionTemplate transactionManager) {
return new SpringTransactionPolicy(transactionManager);
}
public static void main(String[] args) {
SpringApplication.run(EbecsIntegrationAdapterApplication.class, args);
TestEnv testEnv = new TestEnv();
testEnv.printEnvs();
}
TestEnv类:
@Component
public class TestEnv implements EnvironmentAware {
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public void printEnvs() {
System.out.println(environment.getActiveProfiles()[0]);
}
}
答案 0 :(得分:2)
假设EbecsIntegrationAdapterApplication
和TestEnv
位于同一包中
省略不必要的注释
@SpringBootApplication
已经是@Configuration
组件,已经加载了application.properties,并且已经拥有@ComponentScan
如果需要扫描其他软件包,则不要在软件包名称的末尾添加*。最好是坚持最佳实践using-boot-structuring-your-code
@SpringBootApplication
public class EbecsIntegrationAdapterApplication {
new TestEnv()
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]);
}
}