Eu estou usando a primavera. Eu preciso ler valores do arquivo de propriedades. Este é um arquivo de propriedades interno, não o arquivo de propriedades externas. O arquivo de propriedades pode ser como abaixo.
some.properties ---file name. values are below.
abc = abc
def = dsd
ghi = weds
jil = sdd
Eu preciso ler esses valores do arquivo de propriedades não da maneira tradicional. Como conseguir isso? Existe alguma abordagem mais recente com a primavera 3.0?
spring
properties-file
user1016403
fonte
fonte
Respostas:
Configure o PropertyPlaceholder no seu contexto:
Então você se refere às propriedades em seus beans:
EDIT: atualizou o código para analisar a propriedade com vários valores separados por vírgula:
Se isso não funcionar, você pode definir um bean com propriedades, injetar e processá-lo manualmente:
e o feijão:
fonte
aaa
? É@Value(${aaa}) private String aaa;
então que podemosSystem.out.println(aaa)
???????@Value("${aaa}")
, observe as aspas. E sim, você pode imprimi-lo, exceto não no construtor, porque o construtor é executado antes dos valores serem injetados.Existem várias maneiras de conseguir o mesmo. Abaixo estão algumas maneiras comumente usadas na primavera
Usando PropertyPlaceholderConfigurer
Usando PropertySource
Usando ResourceBundleMessageSource
Usando PropertiesFactoryBean
e muitos mais........................
Supondo que
ds.type
seja a chave do seu arquivo de propriedades.Usando
PropertyPlaceholderConfigurer
Registrar
PropertyPlaceholderConfigurer
bean-ou
ou
Após o registro
PropertySourcesPlaceholderConfigurer
, você pode acessar o valorUsando
PropertySource
Na última versão primavera você não precisa se registrar
PropertyPlaceHolderConfigurer
com@PropertySource
, eu encontrei uma boa ligação para entender versão compatibility-Usando
ResourceBundleMessageSource
Registrar Bean-
Valor de acesso-
ou
Usando
PropertiesFactoryBean
Registrar Bean-
Instale as propriedades das propriedades na classe
fonte
Na classe de configuração
fonte
app.properties
na produção v. Testing? Em outras palavras, parte do seu processo de implantação seria substituirapp.properties
pelos valores de produção?Aqui está uma resposta adicional que também foi de grande ajuda para entender como funcionava: http://www.javacodegeeks.com/2013/07/spring-bean-and-propertyplaceholderconfigurer.html
fonte
PropertySourcesPlaceholderConfigurer
Bean com@PropertySource
@PropertySource
.Se você precisar ler manualmente um arquivo de propriedades sem usar o @Value.
Obrigado pela página bem escrita de Lokesh Gupta: Blog
fonte
Você precisa colocar um bean PropertyPlaceholderConfigurer no contexto do aplicativo e definir sua propriedade de localização.
Veja detalhes aqui: http://www.zparacha.com/how-to-read-properties-file-in-spring/
Pode ser necessário modificar um pouco o arquivo de propriedades para que isso funcione.
Espero que ajude.
fonte
Outra maneira é usar um ResourceBundle . Basicamente, você obtém o pacote usando seu nome sem as '.properties'
E você recupera qualquer valor usando isso:
fonte
fonte
Recomendarei a leitura deste link https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html dos documentos do SpringBoot sobre a injeção de configurações externas. Eles não falaram apenas sobre recuperar um arquivo de propriedades, mas também arquivos YAML e até JSON. Eu achei útil. Espero que você também.
fonte
Eu queria uma classe de utilidade que não fosse gerenciada pela primavera, então não há anotações da primavera
@Component
,@Configuration
etc. Mas eu queria que a classe lesseapplication.properties
Eu consegui fazê-lo funcionar, fazendo com que a classe conhecesse o Contexto Spring, portanto, está ciente
Environment
e, portanto,environment.getProperty()
funciona conforme o esperado.Para ser explícito, eu tenho:
application.properties
Utils.java
ApplicationContextProvider.java (consulte Spring, obtenha o ApplicationContext atual )
fonte