propertysource leer example application java spring spring-properties

java - leer - spring boot configuration properties



Spring @Value no resuelve el valor del archivo de propiedad (7)

El problema se debe a un problema en mi applicationContext.xml vs spring-servlet.xml - fue un problema de alcance entre los beans.

pedjaradenkovic amablemente me señaló un recurso existente: la anotación Spring @Value en la clase @Controller no evaluaba el valor dentro del archivo de propiedades y Spring 3.0.5 no evalúa la anotación @Value de las propiedades

He tenido esto trabajando en algún otro proyecto antes, solo estoy volviendo a hacer lo mismo pero por alguna razón no está funcionando. Spring @Value no lee el archivo de propiedades, sino que toma el valor literalmente

AppConfig.java

@Component public class AppConfig { @Value("${key.value1}") private String value; public String getValue() { return value; } }

applicationContext.xml:

<context:component-scan base-package="com.test.config" /> <context:annotation-config /> <bean id="appConfigProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:appconfig.properties" /> </bean>

appconfig.properties

key.value1=test value 1

En mi controlador, donde tengo:

@Autowired private AppConfig appConfig;

La aplicación comienza bien, pero cuando lo hago

appConfig.getValue()

vuelve

${key.value1}

No se resuelve con el valor dentro del archivo de propiedades.

¿Pensamientos?


En mi caso, los campos estáticos no serán inyectados.


En mi caso, me faltaban las llaves. Tenía @Value("foo.bar") String value lugar de la forma correcta @Value("${foo.bar}") String value


Estaba usando el arranque de primavera, y para mí la actualización de la versión de 1.4.0.RELEASE a 1.5.6.RELEASE resolvió este problema.


Lea el comentario de pedjaradenkovic.

Además del enlace que proporciona, la razón por la que esto no funciona es que el proceso de @Value requiere un PropertySourcesPlaceholderConfigurer lugar de PropertyPlaceholderConfigurer .


También encontré que el motivo por el que @value no funcionaba era que @value requiere PropertySourcesPlaceholderConfigurer lugar de PropertyPlaceholderConfigurer . Hice los mismos cambios y funcionó para mí, estoy usando la versión de primavera 4.0.3. Configuré esto usando el código siguiente en mi archivo de configuración -

@Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); }


para el usuario de Sprig-boot tanto PropertyPlaceholderConfigurer como el nuevo PropertySourcesPlaceholderConfigurer agregado en Spring 3.1. por lo que es sencillo acceder al archivo de propiedades. solo inyectar

@Value("${key.value1}") private String value;