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;