Como ler a variável de ambiente do sistema no contexto do aplicativo?
Eu quero algo como:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
ou
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
dependendo do ambiente.
Posso ter algo assim no contexto do meu aplicativo?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
onde o val real é definido com base na VARIÁVEL DO AMBIENTE DO SISTEMA
Estou usando Spring 3.0
assert System.getProperty("env") == "QA";
export
, etc), permite apenas a leitura de propriedades do sistema Java.System.getProperty("prop")
. Se quiser ler uma propriedade do sistema operacional, useSystem.getenv("os-env-variable")
. Veja javadoc: docs.oracle.com/javase/6/docs/api/java/lang/System.html#{systemEnvironment['ENV_VARIABLE_NAME']}
.Hoje em dia você pode colocar
em seu
@Component
,@Bean
etc. e, em seguida, acesse as propriedades por meio daEnvironment
classe:Para uma única propriedade em um
@Bean
Outra maneira são os
@ConfigurationProperties
feijões úteis :Nota: Apenas lembre-se de reiniciar o eclipse após definir uma nova variável de ambiente
fonte
Environment
interface?java.lang.System
por exemplo, para obter o tipo de sistema operacional que você fariaenv.getProperty("os.name")
supondo queenv
seja sua instância deorg.springframework.core.env.Environment
.@Autowired private Environment environment;
não funciona para o meuComponent
ambiente é sempre nuloSim, você pode fazer,
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
por exemplo.A variável systemProperties é predefinida, consulte 6.4.1 Configuração baseada em XML .
fonte
Em sua definição de bean, certifique-se de incluir "searchSystemEnvironment" e configurá-lo como "true". E se você estiver usando para construir um caminho para um arquivo, especifique-o como um arquivo: /// url.
Por exemplo, se você tiver um arquivo de configuração localizado em
em seguida, defina uma variável de ambiente como:
e seu aplicativo pode carregar o arquivo usando uma definição de bean como esta:
por exemplo
fonte
Usando Spring EL você pode escrever um exemplo como segue
fonte
Para o meu caso de uso, precisei acessar apenas as propriedades do sistema, mas fornecer valores padrão no caso de serem indefinidos.
É assim que se faz:
fonte
Declare o titular do lugar da propriedade da seguinte maneira
Então, digamos que você queira ler o
System.property("java.io.tmpdir")
seu bean Tomcat ou qualquer bean e adicionar o seguinte em seu arquivo de propriedades:fonte
É assim que se faz:
Mas lembre-se de que o Spring é carregado primeiro e então carregará este bean MethodInvokingFactoryBean. Portanto, se você está tentando usar isso para o seu caso de teste, certifique-se de usar depende do. Por exemplo, neste caso
Caso você esteja usando para sua classe principal, é melhor definir esta propriedade usando seu pom.xml como
fonte
Você pode mencionar seus atributos de variáveis em um arquivo de propriedades e definir arquivos de propriedades específicos do ambiente, como local.properties, production.propertied etc.
Agora, com base no ambiente, um desses arquivos de propriedade pode ser lido em um dos ouvintes chamados na inicialização, como o ServletContextListener.
O arquivo de propriedades conterá os valores específicos do ambiente para várias chaves.
Amostra de "local.propeties"
Amostra "production.properties"
Para usar esses arquivos de propriedades, você pode usar REsource conforme mencionado abaixo
SERVER_TYPE pode ser definido como a variável de ambiente com valores apropriados para o ambiente local e de produção.
Com essas alterações, o appplicationContext.xml terá as seguintes alterações
Espero que isto ajude .
fonte
Obrigado a @Yiling. Essa foi uma dica.
Depois disso, você deve ter uma variável de ambiente chamada 'FILE_PATH'. Certifique-se de reiniciar seu terminal / IDE após criar essa variável de ambiente.
fonte