propertysourcesplaceholderconfigurer propertysource property example context application java spring properties spring-environment

java - example - Defina Spring @PropertySource en xml y utilícelo en el entorno



spring boot properties file (2)

En Spring JavaConfig, puedo definir la fuente de la propiedad e inyectarla en el entorno

@PropertySource("classpath:application.properties") @Inject private Environment environment;

¿Cómo hago eso si en xml? Estoy usando context: property-placeholder, y en la clase JavaConfig @ImportResource para importar el xml. Pero no puedo recuperar la propiedad definida en el archivo de propiedades usando environment.getProperty ("xx")

<context:property-placeholder location="classpath:application.properties" />


AFAIK, no hay forma de hacerlo mediante XML puro. De todos modos, aquí hay un pequeño código que hice esta mañana:

Primero, la prueba:

public class EnvironmentTests { @Test public void addPropertiesToEnvironmentTest() { ApplicationContext context = new ClassPathXmlApplicationContext( "testContext.xml"); Environment environment = context.getEnvironment(); String world = environment.getProperty("hello"); assertNotNull(world); assertEquals("world", world); System.out.println("Hello " + world); } }

Luego la clase:

public class PropertySourcesAdderBean implements InitializingBean, ApplicationContextAware { private Properties properties; private ApplicationContext applicationContext; public PropertySourcesAdderBean() { } public void afterPropertiesSet() throws Exception { PropertiesPropertySource propertySource = new PropertiesPropertySource( "helloWorldProps", this.properties); ConfigurableEnvironment environment = (ConfigurableEnvironment) this.applicationContext .getEnvironment(); environment.getPropertySources().addFirst(propertySource); } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }

Y el testContext.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans ...> <util:properties id="props" location="classpath:props.properties" /> <bean id="propertySources" class="org.mael..testing.PropertySourcesAdderBean"> <property name="properties" ref="props" /> </bean> </beans>

Y el archivo props.properties:

hello=world

Es bastante simple, solo use un bean ApplicationContextAware y obtenga ConfigurableEnvironment desde el (Web)ApplicationContext . Luego simplemente agregue un PropertiesPropertySource a MutablePropertySources


Si lo que necesita es acceder a la propiedad "xx" del archivo "application.properties", puede lograrlo sin código Java declarando el siguiente bean en su archivo xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="application.properties"/> </bean>

Entonces, si desea inyectar la propiedad en un bean, solo haga referencia a ella como una variable:

<bean id="myBean" class="foo.bar.MyClass"> <property name="myProperty" value="${xx}"/> </bean>