2017-07-04 3 views
0

J'ai des fichiers de configuration pour mes différents environnements: prod.properties, dev.propertites et test.properties.différence dans l'annotation setProperty et ActiveProfiles pour les tests junit

fichier Propriétés est chargé via un fichier application à l'aide context.xml

$ {} spring.profiles.active .properties

et en passant le drapeau -Dspring.profiles.active. Cela fonctionne fichier pour mes 3 environnements.

Pour les tests JUnit Je suis en train d'utiliser

@ActiveProfiles ("test")

dans ma classe de test, mais $ (spring.profiles.active) ne résout pas. Mais quand je l'utilise

System.getProperties() setProperty ("spring.profiles.active", "test").

elle a été résolue très bien.

Je sais @ActiveProfiles est seulement pour les classes de test mais pourquoi ne définit-il pas la propriété spring.profiles.active? Cela affecte-t-il seulement les haricots à utiliser? Cela ne permet pas non plus de déterminer qui gère le mieux les profils et les fichiers de propriétés. Spring profiles and Testing

Mise à jour: Je l'ai jusqu'à présent eu recours à l'utilisation de ce qui suit dans mon dossier de contexte d'application:

<beans profile="dev,prod"> 
<context:property-placeholder 
     location="classpath:META-INF/properties/generic.properties, 
     classpath:META-INF/properties/${spring.profiles.active}/${spring.profiles.active}.properties"/> 
     <context:component-scan base-package="com.my.package.to.scan"/> 
</beans>  

<beans profile="test"> 
    <context:property-placeholder 
     location="classpath:META-INF/properties/generic.properties, 
     classpath:META-INF/properties/test/test.properties"/> 
<context:component-scan base-package="com.my.package.to.scan"/> 
</beans> 

Répondre

0

Comme son nom l'indique @ActiveProfile s, c'est un tableau de profils.

/** 
* The bean definition profiles to activate. 
* <p>This attribute may <strong>not</strong> be used in conjunction with 
* {@link #value}, but it may be used <em>instead</em> of {@link #value}. 
*/ 
@AliasFor("value") 
String[] profiles() default {}; 

Essayez avec @ActiveProfiles({"test"}).

+0

Je voudrais que ce soit si facile ... ne le capte pas ... Causée par: java.io.FileNotFoundException: ressource de chemin de classe [META-INF/properties/$ {spring.profiles.active}/$ {spring.profiles.active} .properties] ne peut pas être ouvert car il n'existe pas –

+0

Pour que cela fonctionne, j'ai dû définir des profils de bean dans mon fichier de contenu d'application pour l'espace réservé de la propriété. Pour mes envinronments je garde la propriété $ {spring.profiles.active} dans le chemin du fichier de propriétés mais pour les fins de junit je l'ai codé en dur. –

+0

@MichoRizo FileNotFoundException est quelque chose de différent de ce que vous avez initialement mentionné en question. Pour cela, vous pouvez partager d'autres informations comme la structure du projet de votre emplacement de fichier. Mieux si vous faites une nouvelle question car je pense que cela n'a pas besoin d'être codé en dur. – Rohit