有什么方法可以通过检查正在运行的活动配置文件来动态加载@ImportResources?



我下面有这个类。。。它负责启动我的应用程序,有吗使@ImportResources注释动态化的策略
对于我的测试覆盖,我想加载另一个资源。我尽量避免使用并行配置运行单元测试,因为结果是间歇性的。

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ImportResource;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.client.RestTemplate;

import br.com.bradesco.ciar.srv.agorainv.infrastructure.LoggingClientHttpRequestInterceptor;

@SpringBootApplication
@ImportResource("spring/*.xml")
public class Application {

@Value("${rest.timeout.read}")
private int readTimeout;
@Value("${rest.timeout.connect}")
private int connectTimeout;

public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}

@Bean
public HttpClient httpClient() {
try {
return HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(final X509Certificate[] arg0, final String arg1) throws CertificateException {
return true;
}
}).build()).build();
}
catch (final Exception e) {
throw new RuntimeException(e);
}
}

@Bean
public HttpComponentsClientHttpRequestFactory httpRequestFactory() {
final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient());
requestFactory.setReadTimeout(readTimeout);
requestFactory.setConnectTimeout(connectTimeout);
return requestFactory;
}

@Bean
public RestTemplate restTemplate() {
final RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(httpRequestFactory()));
restTemplate.getInterceptors().add(new LoggingClientHttpRequestInterceptor());
return restTemplate;
}

@Bean
public LocalValidatorFactoryBean restValidator() {
return new LocalValidatorFactoryBean();
}

}

您可以尝试将@ImportResource注释移动到用@Profile注释注释的单独配置类,例如:

@Profile("!Test")
@Configuration
@ImportResource("spring/*.xml")
class ResourceConfiguration {}

最新更新