#java #spring-boot
#java #весенняя загрузка
Вопрос:
У меня есть этот класс ниже… он отвечает за запуск моего приложения, есть ли какой-нибудь маневр, чтобы сделать аннотацию @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();
}
}
Ответ №1:
Вы могли бы попробовать переместить @ImportResource
аннотацию в отдельный класс конфигурации, аннотированный аннотацией @Profile, например:
@Profile("!Test")
@Configuration
@ImportResource("spring/*.xml")
class ResourceConfiguration {}
Комментарии:
1. Но я должен проверить, активен ли какой-либо профиль, и после этого я решаю, какой ресурс использовать. У меня есть другая папка с именем spring-test, которая содержит режим синхронизации, и я должен выполнить эту папку вместо spring / * xml.