Comment lire la variable d'environnement système dans le contexte de l'application?
Je veux quelque chose comme:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
ou
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
en fonction de l'environnement.
Puis-je avoir quelque chose comme ça dans mon contexte d'application?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
où la valeur réelle est définie en fonction de la VARIABLE D'ENVIRONNEMENT DU SYSTÈME
J'utilise Spring 3.0
la source
assert System.getProperty("env") == "QA";
export
, etc.), cela permet uniquement de lire les propriétés du système Java.System.getProperty("prop")
. Si vous souhaitez lire une propriété du système d'exploitation, utilisezSystem.getenv("os-env-variable")
. Voir javadoc: docs.oracle.com/javase/6/docs/api/java/lang/System.html#{systemEnvironment['ENV_VARIABLE_NAME']}
.De nos jours, vous pouvez mettre
dans votre
@Component
,@Bean
etc., puis accéder aux propriétés par laEnvironment
classe:Pour une seule propriété dans un
@Bean
Une autre façon sont les
@ConfigurationProperties
haricots pratiques :Remarque: n'oubliez pas de redémarrer eclipse après avoir défini une nouvelle variable d'environnement
la source
Environment
interface?java.lang.System
par exemple pour obtenir le type de système d'exploitation que vous feriez enenv.getProperty("os.name")
supposant qu'ilenv
s'agit de votre instanceorg.springframework.core.env.Environment
.@Autowired private Environment environment;
ne fonctionne pas pour monComponent
environnement est toujours nulOui, vous pouvez le faire
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
par exemple.La variable systemProperties est prédéfinie, voir 6.4.1 Configuration basée sur XML .
la source
Dans votre définition de bean, assurez-vous d'inclure "searchSystemEnvironment" et de le définir sur "true". Et si vous l'utilisez pour créer un chemin vers un fichier, spécifiez-le sous forme de fichier: /// url.
Par exemple, si vous avez un fichier de configuration situé dans
puis définissez une variable d'environnement comme ceci:
et votre application peut charger le fichier en utilisant une définition de bean comme celle-ci:
par exemple
la source
En utilisant Spring EL, vous pouvez écrire un exemple comme suit
la source
Pour mon cas d'utilisation, je devais accéder uniquement aux propriétés du système, mais fournir des valeurs par défaut au cas où elles ne seraient pas définies.
Voici comment vous procédez:
la source
Déclarez l'espace réservé de propriété comme suit
Ensuite, disons que vous voulez lire
System.property("java.io.tmpdir")
pour votre bean Tomcat ou n'importe quel bean, puis ajoutez ce qui suit dans votre fichier de propriétés:la source
Voici comment vous procédez:
Mais rappelez-vous que le printemps est chargé en premier, puis il chargera ce bean MethodInvokingFactoryBean. Donc, si vous essayez d'utiliser ceci pour votre scénario de test, assurez-vous d'utiliser depend-on. Par exemple dans ce cas
Si vous l'utilisez pour votre classe principale, mieux vaut définir cette propriété en utilisant votre pom.xml comme
la source
Vous pouvez mentionner vos attributs de variable dans un fichier de propriétés et définir des fichiers de propriétés spécifiques à l'environnement comme local.properties, production.propertied, etc.
Maintenant en fonction de l'environnement, l'un de ces fichiers de propriétés peut être lu dans l'un des écouteurs appelés au démarrage, comme le ServletContextListener.
Le fichier de propriétés contiendra les valeurs spécifiques à l'environnement pour différentes clés.
Exemple de "local.propeties"
Exemple de "production.properties"
Pour utiliser ce fichier de propriétés, vous pouvez utiliser REsource comme mentionné ci-dessous
SERVER_TYPE peut être défini comme la variable d'environnement avec des valeurs appropriées pour l'environnement local et de production.
Avec ces modifications, appplicationContext.xml aura les modifications suivantes
J'espère que cela t'aides .
la source
Merci à @Yiling. C'était un indice.
Après cela, vous devriez avoir une variable d'environnement nommée 'FILE_PATH'. Assurez-vous de redémarrer votre terminal / IDE après avoir créé cette variable d'environnement.
la source