Ich habe eine Webanwendung, wo ich das typische Problem habe, dass es verschiedene Konfigurationsdateien für verschiedene Umgebungen benötigt. Einige Konfigurationen werden auf dem Anwendungsserver als JNDI-Datenquellen gespeichert. Einige Konfigurationen bleiben jedoch in den Eigenschaftendateien erhalten.Federprofile und Testen
Daher möchte ich die Spring-Profile-Funktion verwenden.
Mein Problem ist, dass ich den Testfall nicht ausgeführt bekomme.
context.xml:
<context:property-placeholder
location="classpath:META-INF/spring/config_${spring.profiles.active}.properties"/>
Testcase:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
TestPreperationExecutionListener.class
})
@Transactional
@ActiveProfiles(profiles = "localtest")
@ContextConfiguration(locations = {
"classpath:context.xml" })
public class TestContext {
@Test
public void testContext(){
}
}
Das Problem, dass die Variable das Profil für das Laden zu sein scheint, ist nicht gelöst:
Caused by: java.io.FileNotFoundException: class path resource [META-INF/spring/config_${spring.profiles.active}.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:181)
at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:161)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.postProcessBeanFactory(PropertySourcesPlaceholderConfigurer.java:138)
... 31 more
Die aktuelle Profil sollte mit der @ActiveProfile
Annotation festgelegt werden. Da es sich um einen Testfall handelt, kann ich den web.xml
nicht verwenden. Wenn möglich, möchte ich auch Laufzeitoptionen vermeiden. Der Test sollte so laufen wie er ist (wenn möglich).
Wie kann ich das Profil richtig aktivieren? Ist es möglich, das Profil mit einer context.xml festzulegen? Kann ich die Variable in einer test-context.xml deklarieren, die den normalen Kontext aufruft?
Dank. Abbildung eine Verbesserung hinzugefügt unten. –
Dieser Ansatz ist nicht sauber, Sie müssen zu der Eigenschaftendatei gehen, in der der aktive Profilwert geändert werden soll. – codebusta