J'ai un projet Spring qui utilise un autre projet. Chaque projet a son propre profil de ressort initialisé à partir de code Java en utilisant applicationContext.xml
et *.properties
pour chaque profil. J'injecte le profil de args[]
. Le problème est que le second projet utilise la configuration par défaut pour env du applicationContext.xml
Je ne peux pas injecter le env de args[]
au deuxième projet et j’ai cherché un article qui expliquerait le fonctionnement du profil Spring.
applicationContext.xml
?applicationContext.xml
?Des articles sur ce sujet ou même des exemples seraient les plus appréciés !! Merci d'avance.
SPRING_PROFILES_ACTIVE est la variable d'environnement à remplacer/sélectionner le profil de ressort
Si vous fournissez le profil Spring à votre machine virtuelle Java, il ne devrait y avoir aucun problème:
Java -Dspring.profiles.active=development -jar yourApplication.jar
Voir aussi Spring-Documentation:
69.5 Définir les profils de ressort actifs
L'environnement Spring a une API pour cela, mais normalement vous devez définir une propriété système (spring.profiles.active) ou un environnement de système d'exploitation variable (SPRING_PROFILES_ACTIVE). Par exemple. lancez votre application avec un -D argument (n'oubliez pas de le placer avant l'archive principale de la classe ou du fichier jar):
$ Java -jar -Dspring.profiles.active = production demo-0.0.1-SNAPSHOT.jar
Dans Spring Boot, vous pouvez également définir le profil actif dans application.properties, par exemple.
spring.profiles.active = production
Une valeur définie de cette manière est remplacée par la propriété ou l'environnement du système paramètre variable, mais pas par SpringApplicationBuilder.profiles () méthode. Ainsi, cette dernière API Java peut être utilisée pour augmenter les profils sans changer les valeurs par défaut.
Voir le chapitre 25, Profils dans la section "Fonctionnalités de démarrage du printemps" pour Plus d'information.
Je configure normalement le contexte d'application en utilisant configuration basée sur les annotations plutôt que configuration basée sur XML. Quoi qu'il en soit, je pense que les deux ont le même priorité.
* Répondant à votre question, la variable système a une priorité plus élevée *
@Component
@Profile("dev")
public class DatasourceConfigForDev
Maintenant, le profil est dev
Remarque: si le profil est donné comme @Profile("!dev")
, le profil exclura dev et s'appliquera à tous les autres.
<beans profile="dev">
<bean id="DatasourceConfigForDev" class="org.skoolguy.profiles.DatasourceConfigForDev"/>
</beans>
Dans les applications Web, WebApplicationInitializer peut être utilisé pour configurer le ServletContext par programme.
@Configuration
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("spring.profiles.active", "dev");
}
}
Vous pouvez également définir des profils directement sur l'environnement:
@Autowired
private ConfigurableEnvironment env;
...
env.setActiveProfiles("dev");
les profils peuvent également être activés dans le fichier web.xml de l'application Web, à l'aide d'un paramètre de contexte:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-config.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
Les noms de profil passés en tant que paramètre seront activés lors du démarrage de l'application:
-Dspring.profiles.active=dev
Dans les IDE, vous pouvez définir les variables d'environnement et les valeurs à utiliser lors de l'exécution d'une application. Voici la configuration d'exécution dans Eclipse:
définir via la ligne de commande: export spring_profiles_active=dev
Tout bean qui ne spécifie pas de profil appartient au profil «par défaut».
Ma solution consiste à définir la variable d'environnement sur spring.profiles.active=development
. Ainsi, toutes les applications en cours d'exécution sur cette machine référenceront la variable et lanceront l'application. L'ordre dans lequel le printemps charge une propriété comme suit
application.properties
system properties
environment variable
Si je lance la ligne de commande: Java -Dspring.profiles.active=development -jar yourApplication.jar
à partir de mon répertoire webapplication, il est indiqué que le chemin est incorrect. Donc, je viens de définir le profil manuellement dans le fichier application.properties comme ceci:
spring.profiles.active=mysql
ou
spring.profiles.active=postgres
ou
spring.profiles.active=mongodb
Si vous utilisez docker pour déployer l'application Spring Boot, vous pouvez définir profile à l'aide de l'indicateur e :
docker run -e "SPRING_PROFILES_ACTIVE = prod" -p 8080: 8080 -t r.test.co/myapp:latest