Usamos o código abaixo para injetar Spring beans com propriedades de um arquivo de propriedades.
<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>
Existe uma maneira de acessar as propriedades programaticamente? Estou tentando fazer algum código sem injeção de dependência. Então, eu gostaria de ter apenas um código como este:
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");
spring
properties
Marcus Leon
fonte
fonte
Respostas:
Que tal PropertiesLoaderUtils ?
fonte
PropertyPlaceholderConfigurer
, embora seja um exagero para a tarefa.Se tudo o que você deseja fazer é acessar o valor do espaço reservado a partir do código, existe a
@Value
anotação:Para acessar espaços reservados no SPEL, use esta sintaxe:
Para expor a configuração a visualizações com o SPEL desativado, pode-se usar este truque:
E, em seguida, use o expositor para expor propriedades a uma exibição:
Em vista, use as propriedades expostas como esta:
Esta solução tem a vantagem de poder confiar na implementação padrão de espaço reservado injetada pelo contexto: tag de propriedade-espaço reservado.
Agora, como observação final, se você realmente precisar capturar todas as propriedades de espaço reservado e seus valores, precisará canalizá-las através de StringValueResolver para garantir que os espaços reservados funcionem dentro dos valores da propriedade conforme o esperado. O código a seguir fará isso.
fonte
CREDIT : acesso programático às propriedades no Spring sem reler o arquivo de propriedades
Eu encontrei uma boa implementação de acessar as propriedades programaticamente na primavera sem recarregar as mesmas propriedades que a primavera já carregou. [Além disso, não é necessário codificar o local do arquivo de propriedades na origem]
Com essas alterações, o código parece mais limpo e mais sustentável.
O conceito é muito simples. Apenas estenda o espaço reservado de propriedade padrão da primavera (PropertyPlaceholderConfigurer) e capture as propriedades que ele carrega na variável local
Exemplo de uso
Mudanças na configuração do Spring
Espero que isso ajude a resolver os problemas que você tem
fonte
Eu fiz isso e funcionou.
Isso deve funcionar.
fonte
Você também pode usar os utilitários de mola ou carregar propriedades por meio do PropertiesFactoryBean.
ou:
Em seguida, você pode buscá-los em seu aplicativo com:
e use adicionalmente estas propriedades em sua configuração:
Isso também está nos documentos: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties
fonte
Crie uma turma como abaixo
Onde quer que você queira acessar uma propriedade, use
- escreve getters e setters na classe acessadora
fonte
Como você sabe que as versões mais recentes do Spring não usam o PropertyPlaceholderConfigurer e agora usam outra construção de pesadelo chamada PropertySourcesPlaceholderConfigurer. Se você está tentando obter propriedades resolvidas do código e deseja que a equipe do Spring nos tenha fornecido uma maneira de fazer isso há muito tempo, vote nesta postagem! ... Porque é assim que você faz da nova maneira:
PropertySourcesPlaceholderConfigurer da subclasse:
Para usá-lo, use sua subclasse no seu @Configuration e salve uma referência a ele para uso posterior.
Uso:
fonte
Aqui está outra amostra.
fonte
Isso me ajuda a:
fonte
Isso resolverá quaisquer propriedades aninhadas.
fonte
Você pode obter suas propriedades através da
Environment
classe. Como está a documentação:Tendo o ambiente como uma
env
variável, basta chamar:Você pode obter suas propriedades "brutas" através de:
Ele pesquisará todas as fontes de propriedades registradas pela primavera.
Você pode obter o Ambiente através de:
ApplicationContextAware
e depois chamegetEnvironment()
contextoEnvironmentAware
.É obtido através da implementação de uma classe porque as propriedades são resolvidas no estágio inicial da inicialização do aplicativo, pois podem ser necessárias para a construção do bean.
Leia mais sobre a documentação: Spring Environment documentation
fonte
Esta publicação também explica como acessar as propriedades: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html
Você pode acessar as propriedades carregadas pelo spring property-placeholder sobre esse spring bean:
fonte
em servlet-context.xml depois você pode usar seu arquivo diretamente em qualquer lugar
fonte
Use o código abaixo em seu arquivo de configuração do Spring para carregar o arquivo do caminho da classe do seu aplicativo
fonte
Esta é a melhor maneira de fazê-lo funcionar:
fonte