java - aws - ¿Cómo inyectar variables ambientales dentro de la configuración Spring xml?
spring boot aws s3 (3)
Para alguien que usa JavaConfig:
En el archivo @Configuration, necesitamos tener:
@Bean
public static PropertyPlaceholderConfigurer properties() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ClassPathResource[] resources = new ClassPathResource[ ] {
new ClassPathResource("db.properties")
};
ppc.setLocations( resources );
ppc.setIgnoreUnresolvablePlaceholders( true );
ppc.setSearchSystemEnvironment(true);
return ppc;
}
@Value("${db.url}")
private String dbUrl;
@Value("${db.driver}")
private String dbDriver;
@Value("${db.username}")
private String dbUsername;
@Value("${db.password}")
private String dbPassword;
@Bean
public DataSource db() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(dbUrl);
dataSource.setDriverClassName(dbDriver);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);
return dataSource;
}
importante es la línea: ppc.setSearchSystemEnvironment (true);
después de eso en db.properties, tengo:
db.url = ${PG_URL}
db.driver = ${PG_DRIVER}
db.username = ${PG_USERNAME}
db.password = ${PG_PASSWORD}
AWS habla sobre System.getProperty("JDBC_CONNECTION_STRING")
en http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.managing.html después de configurar nuestras variables de entorno. Todo genial, excepto que no puedo llamar a System.getProperty
dentro de mi código de configuración de Spring XML ni puedo solicitar atajos de paquetes de recursos ya que el paquete de recursos en sí tiene que extraer de alguna manera estas variables de entorno para servirlos. ¿Podría ayudarme amablemente a convertir esta configuración de ejemplo para usar variables ambientales? :-)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://secrethost:007/whois?autoReconnect=true" />
<property name="username" value="bond" />
<property name="password" value="abuginsidemistycorner" />
<property name="initialSize" value="100" />
<property name="minEvictableIdleTimeMillis">
<value>300000</value>
</property>
<property name="timeBetweenEvictionRunsMillis">
<value>60000</value>
</property>
<property name="maxIdle" value="20" />
</bean>
No pude entender qué hace la gente aquí:
¿Puedo usar una ubicación basada en variables de entorno para Spring FileSystemResource? que funcionaría para la versión de primavera reciente?
Primero agregue un elemento <context:property-placeholder .. />
a su configuración.
<context:property-placeholder />
Entonces simplemente use marcadores de posición en su configuración.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${JDBC_CONNECTION_STRING}" />
<property name="username" value="bond" />
<property name="password" value="abuginsidemistycorner" />
<property name="initialSize" value="100" />
<property name="minEvictableIdleTimeMillis" value="30000" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="maxIdle" value="20" />
</bean>
Asegúrese de que los nombres de marcador de posición coincidan con las variables que haya configurado.
Si está utilizando la clase org.springframework.beans.factory.config.PropertyPlaceholderConfigurer para cargar los archivos de propiedades, puede establecer la propiedad systemPropertiesMode
en el valor SYSTEM_PROPERTIES_MODE_OVERRIDE
.
En spring.xml tendrás este bean:
<bean id="propertyPlaceholder"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations">
<list>
<value>classpath://file.properties</value>
</list>
</property>
</bean>
Spring cargará las propiedades del sistema de esta manera:
Primero compruebe las propiedades del sistema antes de probar las propiedades especificadas. Esto permite que las propiedades del sistema anulen cualquier otra fuente de propiedad.
De esta forma, debería poder leer las propiedades del sistema como propiedades normales.