Comment définir le profil du ressort à partir de la variable système?

j'ai un projet de printemps qui utilise un autre projet. Chaque projet a son propre profil de printemps initialiser à partir du code java en utilisant applicationContext.xml et *.properties pour chaque profil. J'ai injecter le profil de args[]. le problème est que second project utilise la configuration par défaut pour l'env deapplicationContext.xml Je ne peux pas injecter l'env de args[] au second projet et j'ai essayé de chercher un article qui expliquera comment le profil de printemps fonctionne.

  1. Est il y a une hiérarchie sur laquelle le profil sera affiché lorsque le profil par défaut n'est pas configuré à applicationContext.xml?
  2. le Système de var plus forte que applicationContext.xml configuration?
  3. Que pensez-vous est la meilleure solution à mon défi?

des Articles sur ce sujet ou même des exemples seraient les plus appréciés!! Merci à l'avance.

19
demandé sur Manos Nikolaidis 2016-07-22 10:29:55

6 réponses

SPRING_PROFILES_ACTIVE est la variable d'environnement pour outrepasser / choisir le profil de ressort

31
répondu Lalit Jha 2017-09-05 08:35:24

si vous fournissez votre JVM le profil du ressort, il ne devrait pas y avoir de problèmes:

java -Dspring.profiles.active=development -jar yourApplication.jar 

Voir Aussi Spring-Documentation:

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

69.5 définir les profils de ressorts actifs

L'environnement du printemps a une API pour cela, mais normalement vous définiriez un Système de propriété (printemps.profil.active) ou un Environnement de système d'exploitation variable (SPRING_PROFILES_ACTIVE). Par exemple: lancez votre application avec un Argument-D (n'oubliez pas de le mettre avant de la classe principale ou jar archive):

$ java-jar-Dspring.profil.active=production Démo-0.0.1-SNAPSHOT.jar

dans la botte de printemps, vous pouvez également définir le profil actif dans application.propriétés, par exemple,

printemps.profil.actif = production

un ensemble de valeurs de cette façon est remplacé par la propriété du système ou environnement réglage variable, mais pas par le SpringApplicationBuilder.profil() méthode. Ainsi, cette dernière API Java peut être utilisée pour augmenter les profils sans modifier les paramètres par défaut.

voir Chapitre 25, profils dans la section ‘Caractéristiques de la botte de printemps’ pour de plus amples informations.

26
répondu JanTheGun 2016-07-22 07:41:51

je configure normalement l'applicationContext en utilisant Annotation en fonction de la configuration plutôt que XML de configuration. De toute façon, je crois qu'ils ont tous les deux la même priorité.

*répondant à votre question, la variable système a une priorité plus élevée *


Pour le profil de base de haricots de l'applicationContext

  • utilisez @Profile sur un Bean

    @Component
    @Profile("dev")
    public class DatasourceConfigForDev
    

    Maintenant, le profil est dev

    Remarque : si le Profil est donné comme @Profile("!dev") alors le profil exclura dev et sera pour tous les autres.

  • utiliser l'attribut profiles dans XML

    <beans profile="dev">
      <bean id="DatasourceConfigForDev" class="org.skoolguy.profiles.DatasourceConfigForDev"/>
    </beans>
    

Définir la valeur de profil:

  • Programmatically via WebApplicationInitializer interface

    dans les applications web, WebApplicationInitializer peut être utilisé pour configurer le ServletContext de manière programmatique

    @Configuration
    public class MyWebApplicationInitializer implements WebApplicationInitializer {
    
      @Override
      public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("spring.profiles.active", "dev");
      }
    }
    
  • Programmatically via configurable environment

    Vous pouvez également définir des profils directement sur l'environnement:

    @Autowired
    private ConfigurableEnvironment env;
    
    ...
    
    env.setActiveProfiles("dev");
    
  • paramètre de contexte dans web.xml

    les profils peuvent être activés sur le web.xml de l'application web aussi, en utilisant 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>
    
  • JVM Paramètre Du Système

    les noms de profil passés comme paramètre seront activés lors du démarrage de l'application:

    -Dspring.profiles.active=dev
    

    dans IDEs, vous pouvez définir les variables d'environnement et les valeurs à utiliser quand une application tourne. La suivante est la Configuration d'Exécution dans Eclipse:

Eclipse Run Configuration - screenshot is unavailable

  • Variable D'Environnement

    à régler par ligne de commande : export spring_profiles_active=dev

toute fève qui ne spécifie pas de profil appartient au profil "par défaut".


L'ordre de priorité est le suivant :

  1. paramètre de contexte dans web.xml
  2. WebApplicationInitializer
  3. paramètre du système JVM
  4. variable D'environnement
4
répondu Ajmal V Aliyar 2018-07-15 12:29:06

Ma solution est de définir la variable d'environnement spring.profiles.active=development. De sorte que toutes les applications qui fonctionnent dans cette machine référeront la variable et démarreront l'application. L'ordre dans lequel le ressort charge une propriété comme suit

application.properties
system properties
environment variable
1
répondu Achaius 2016-07-22 08:09:24

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 j'ai juste défini le profil dans manualy dans l'application.les propriétés de fichier comme ceci :

spring.profiles.active=mysql 

ou

spring.profiles.active=postgres

ou

spring.profiles.active=mongodb
1
répondu georges van 2016-07-23 09:16:30

si vous utilisez docker pour déployer l'application de démarrage à ressort, vous pouvez définir le profil utiliser le drapeau e:

docker run-e "SPRING_PROFILES_ACTIVE=prod" - p 8080: 8080-t R. test.co / myapp: dernier

1
répondu db80 2018-04-24 08:31:35