おそらくあなたの最善の策を使用することですSpring Profiles 。あなたの投稿のResourceConfig
を「実動」設定としてマークすることができます。テストの場合は、「テスト」プロフィールの新しいResourceConfig
を作成します。次に、あなたのテストでちょうど"test"
にアクティブなプロファイルを設定し、生産では、(上記のリンクで説明したように)また、あなたの財産の構成ファイルでアクティブなプロファイルを設定することができます"production"
@Profile("production")
@Configuration
@ApplicationPath("/some/path")
public class MyJerseyConfiguration extends ResourceConfig {
public AnalyzerJerseyConfiguration() {
packages(BaseController.class.getPackage().getName());
register(AuthorizationRequestFilter.class);
register(AuthorizationResponseFilter.class);
}
}
@Profile("test")
@Configuration
@ApplicationPath("/some/path")
public class TestConfiguration extends ResourceConfig {
public AnalyzerJerseyConfiguration() {
packages(BaseController.class.getPackage().getName());
register(TestRequestFilter.class);
register(TestResponseFilter.class);
}
}
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
public class TestClass {}
にアクティブなプロファイルを設定します。
異なるテストに異なる構成を使用する場合は、ResourceConfig
サブクラスの束を作成するのではなく、異なるスプリング構成を作成する方が意味があります。さまざまな設定のために@Bean
メソッドを作成することができます。
@Profile("test")
@Configuration
public class TestOneConfig {
@Bean
public ResourceConfig resourceConfig() {
return new ResourceConfig()
.register(Something.class);
}
}
@Profile("test")
@Configuration
public class TestTwoConfig {
@Bean
public ResourceConfig resourceConfig() {
return new ResourceConfig()
.register(DifferentSomething.class);
}
}
どちらを使用するかは、テスト設定に追加するだけです。 Spring Boot 1.4で
@ActiveProfiles("test")
@SpringApplicationConfiguration(classs={MainApp.class, TestOneConfig.class})
public class TheTest {}
(まだリリースされていない)、彼らはResourceConfigCustomizer
をご紹介します。これは、「テスト」ResourceConfig
を作成することなく、あなたが
@Component
public class TestCustomizer implements ResourceConfigCustomizer {
@Override
public void customize(ResourceConfig config) {
config.getClasses().remove(AuthorizationRequestFilter.class);
config.register(TestRequestFilter.class);
}
}
ような何かを行うと、テスト構成でこれを登録することができるかもしれない、それは少しきれいになるかもしれません。
はい。どうもありがとうございました。確かに私はあなたが示唆したように(ほぼ)春のプロファイルを使用し、それは正常に動作しているように見えます。唯一の違いは、@ActiveProfilesアノテーションを使用しなかったのに対し、application.propertiesファイルの* spring.profiles.active *プロパティを代わりに使用したことです。どうもありがとうございました。男 –