Usamos el siguiente código para inyectar Spring beans con propiedades de un archivo de propiedades.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/my.properties"/>
</bean>
<bean id="blah" class="abc">
<property name="path" value="${the.path}"/>
</bean>
¿Hay alguna forma de acceder a las propiedades mediante programación? Estoy tratando de hacer algo de código sin inyección de dependencia. Entonces me gustaría tener un código como este:
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");
spring
properties
Marcus Leon
fuente
fuente
Respuestas:
¿Qué hay de PropertiesLoaderUtils ?
fuente
PropertyPlaceholderConfigurer
, aunque es excesivo para la tarea.Si todo lo que desea hacer es acceder al valor del marcador de posición desde el código, existe la
@Value
anotación:Para acceder a marcadores de posición desde SPEL, use esta sintaxis:
Para exponer la configuración a vistas que tienen SPEL desactivado, uno puede usar este truco:
Y luego use el expositor para exponer propiedades a una vista:
Luego, a la vista, use las propiedades expuestas de esta manera:
Esta solución tiene la ventaja de que puede confiar en la implementación de marcador de posición estándar inyectada por el contexto: etiqueta de marcador de posición de propiedad.
Ahora como nota final, si realmente necesita un para capturar todas las propiedades de marcador de posición y sus valores, debe canalizarlos a través de StringValueResolver para asegurarse de que los marcadores de posición funcionen dentro de los valores de propiedad como se esperaba. El siguiente código hará eso.
fuente
CRÉDITO : acceso programático a las propiedades en Spring sin volver a leer el archivo de propiedades
He encontrado una buena implementación de acceder a las propiedades mediante programación en primavera sin volver a cargar las mismas propiedades que Spring ya ha cargado. [Además, no es necesario codificar la ubicación del archivo de propiedades en la fuente]
Con estos cambios, el código se ve más limpio y más fácil de mantener.
El concepto es muy simple. Simplemente extienda el marcador de posición de propiedad predeterminado de primavera (PropertyPlaceholderConfigurer) y capture las propiedades que carga en la variable local
Ejemplo de uso
Cambios de configuración de primavera
Espero que esto ayude a resolver los problemas que tienes
fuente
He hecho esto y ha funcionado.
Eso debería funcionar.
fuente
También puede usar las utilidades spring o cargar propiedades a través de PropertiesFactoryBean.
o:
Luego puede recogerlos en su aplicación con:
y además usa estas propiedades en tu configuración:
Esto también está en los documentos: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties
fuente
Crea una clase como la siguiente
Luego, donde quiera acceder a un uso de propiedad
- escribir getters y setters en la clase de acceso
fuente
Como saben, las versiones más nuevas de Spring no usan PropertyPlaceholderConfigurer y ahora usan otra construcción de pesadilla llamada PropertySourcesPlaceholderConfigurer. Si está tratando de obtener propiedades resueltas del código, y desea que el equipo de Spring nos haya dado una forma de hacerlo hace mucho tiempo, ¡vote esta publicación! ... Porque así es como lo haces de la nueva manera:
Subclase PropertySourcesPlaceholderConfigurer:
Para usarlo, asegúrese de usar su subclase en su @Configuration y guarde una referencia para su uso posterior.
Uso:
fuente
Aquí hay otra muestra.
fuente
Esto me ayuda:
fuente
Esto resolverá cualquier propiedad anidada.
fuente
Puede obtener sus propiedades a través de la
Environment
clase. Tal como está la documentación:Teniendo el entorno como una
env
variable, simplemente llame:Puede obtener sus propiedades 'en bruto' a través de:
Buscará a través de todas las propiedades que la primavera haya registrado.
Puede obtener Medio Ambiente a través de:
ApplicationContextAware
y luego llamargetEnvironment()
al contextoEnvironmentAware
.Se obtiene mediante la implementación de una clase porque las propiedades se resuelven en la etapa inicial del inicio de la aplicación, ya que pueden ser necesarias para la construcción de beans.
Leer más sobre documentación: documentación de Spring Environment
fuente
Esta publicación también explica cómo acceder a las propiedades: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html
Puede acceder a las propiedades cargadas por el marcador de posición de propiedad spring sobre dicho bean spring:
fuente
en servlet-context.xml después de eso, puede usar directamente su archivo en todas partes
fuente
Utilice el siguiente código en su archivo de configuración de primavera para cargar el archivo desde la ruta de clase de su aplicación
fuente
Esta es la mejor forma en que lo hice funcionar:
fuente