¿Cómo leer la variable de entorno del sistema en el contexto de la aplicación?
Quiero algo como:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
o
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
dependiendo del entorno.
¿Puedo tener algo como esto en el contexto de mi aplicación?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
donde el valor real se establece según la VARIABLE DEL ENTORNO DEL SISTEMA
Estoy usando Spring 3.0
assert System.getProperty("env") == "QA";
export
, etc.), solo permite leer las propiedades del sistema Java.System.getProperty("prop")
. Si desea leer una propiedad del sistema operativo, utiliceSystem.getenv("os-env-variable")
. Ver javadoc: docs.oracle.com/javase/6/docs/api/java/lang/System.html#{systemEnvironment['ENV_VARIABLE_NAME']}
.Hoy en día puedes poner
en su
@Component
,@Bean
, etc, y luego acceder a las propiedades a través de laEnvironment
clase:Para una sola propiedad en un
@Bean
Otra forma son los prácticos
@ConfigurationProperties
frijoles:Nota: solo recuerde reiniciar eclipse después de configurar una nueva variable de entorno
fuente
Environment
interfaz?java.lang.System
por ejemplo, para obtener el tipo de sistema operativo que haríaenv.getProperty("os.name")
asumiendo queenv
es su instancia deorg.springframework.core.env.Environment
.@Autowired private Environment environment;
no funciona para miComponent
el entorno siempre es nuloSí, puede hacerlo,
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
por ejemplo.La variable systemProperties está predefinida, consulte 6.4.1 Configuración basada en XML .
fuente
En su definición de bean, asegúrese de incluir "searchSystemEnvironment" y establézcalo en "true". Y si lo está utilizando para crear una ruta a un archivo, especifíquelo como file: /// url.
Entonces, por ejemplo, si tiene un archivo de configuración ubicado en
luego establezca una variable de entorno así:
y su aplicación puede cargar el archivo usando una definición de frijol como esta:
p.ej
fuente
Utilizando Spring EL puede EIS ejemplo de escritura de la siguiente
fuente
Para mi caso de uso, necesitaba acceder solo a las propiedades del sistema, pero proporcionar valores predeterminados en caso de que no estén definidos.
Así es como lo haces:
fuente
Declare el marcador de posición de propiedad de la siguiente manera
Luego, digamos que desea leer
System.property("java.io.tmpdir")
su bean Tomcat o cualquier bean y luego agregue lo siguiente en su archivo de propiedades:fuente
Así es como lo haces:
Pero recuerde que el resorte se carga primero y luego cargará este bean MethodInvokingFactoryBean. Entonces, si está tratando de usar esto para su caso de prueba, asegúrese de usar depende de. Por ejemplo, en este caso
En caso de que lo esté usando para su clase principal, es mejor establecer esta propiedad usando su pom.xml como
fuente
Puede mencionar los atributos de sus variables en un archivo de propiedades y definir archivos de propiedades específicos del entorno como local.properties, production.propertied, etc.
Ahora, según el entorno, uno de estos archivos de propiedades se puede leer en uno de los oyentes invocados al inicio, como ServletContextListener.
El archivo de propiedades contendrá los valores específicos del entorno para varias claves.
Muestra "locales.propeties"
Muestra "production.properties"
Para usar este archivo de propiedades, puede hacer uso de REsource como se menciona a continuación
SERVER_TYPE se puede definir como la variable de entorno con los valores adecuados para el entorno local y de producción.
Con estos cambios, appplicationContext.xml tendrá los siguientes cambios
Espero que esto ayude .
fuente
Gracias a @Yiling. Eso fue una pista.
Después de esto, debería tener una variable de entorno llamada 'FILE_PATH'. Asegúrese de reiniciar su terminal / IDE después de crear esa variable de entorno.
fuente