Estamos usando um PropertyPlaceholderConfigurer para usar as propriedades java em nossa configuração Spring ( detalhes aqui )
por exemplo:
<foo name="port">
<value>${my.server.port}</value>
</foo>
Gostaríamos de adicionar uma propriedade adicional, mas temos um sistema distribuído em que as instâncias existentes podem usar um valor padrão. Existe uma maneira de evitar a atualização de todos os nossos arquivos de propriedades, indicando um valor padrão na configuração do Spring para quando não há um valor de propriedade de substituição definido?
fonte
18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA
é? Tenho certeza de que todo mundo sabe e eu sou simplesmente estúpido, mas apenas no caso ...Spring 3 oferece suporte à
${my.server.port:defaultValue}
sintaxe.fonte
${my.server.port:-defaultValue}
também dar o mesmo resultado, observe o ":-
" em oposição a ":
".<context:property-placeholder/>
para que isso funcione ou adicionar umPropertyPlaceholderConfigurer
Existe um recurso pouco conhecido, o que torna isso ainda melhor. Você pode usar um valor padrão configurável em vez de um codificado, aqui está um exemplo:
config.properties:
context.xml:
Para usar o padrão e ao mesmo tempo ser capaz de substituir facilmente mais tarde, faça isso em config.properties:
fonte
${timeout.myBean:${timeout.default}}
. Isso permitiu que meu padrão também fosse uma variável.deve funcionar para você ter 8088 como porta padrão
Veja também: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
fonte
O valor padrão pode ser seguido por um
:
após a chave de propriedade, por exemploOu em código java:
Vejo:
valueSeparator
(deAbstractPropertyResolver
)e
VALUE_SEPARATOR
(deSystemPropertyUtils
)BTW, o Operador Elvis está disponível apenas em Spring Expression Language (SpEL),
por exemplo: https://stackoverflow.com/a/37706167/537554
fonte
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html aponta que as "propriedades locais" definidas no próprio bean serão consideradas padrões a serem substituídos pelos valores lidos dos arquivos:
fonte
Também encontro outra solução que funciona para mim. Em nosso projeto de primavera legado, usamos este método para dar aos nossos usuários possibilidades de usar essas próprias configurações:
E em nosso código, para acessar essas propriedades, precisamos escrever algo assim:
E se surgir uma situação em que você precisa adicionar uma nova propriedade, mas agora você não quer adicioná-la na configuração do usuário de produção, isso se tornará um inferno quando você precisar corrigir todos os seus contextos de teste ou seu aplicativo falhará comece.
Para lidar com esse problema, você pode usar a próxima sintaxe para adicionar um valor padrão:
Foi uma verdadeira descoberta para mim.
fonte