No momento, estamos escrevendo um aplicativo que está dividido em vários projetos / módulos. Por exemplo, vamos pegar os seguintes módulos:
- myApp-DAO
- myApp-jabber
Cada módulo tem seu próprio arquivo xml de contexto Spring. Para o módulo DAO, tenho um PropertyPlaceholderConfigurer que lê um arquivo de propriedades com os parâmetros de conexão do banco de dados necessários. No módulo jabber, também tenho um PropertyPlaceHolderConfigurer para as propriedades de conexão do jabber.
Agora vem o aplicativo principal que inclui myApp-DAO e myApp-jabber. Ele lê todos os arquivos de contexto e inicia um grande contexto Spring. Infelizmente, parece que só pode haver um PropertyPlaceholderConfigurer por contexto, portanto, o módulo que for carregado primeiro será capaz de ler seus parâmetros de conexão. O outro lança uma exceção com um erro como "Não foi possível resolver o marcador de posição 'jabber.host'"
Eu meio que entendo qual é o problema, mas não sei realmente uma solução - ou a melhor prática para meu caso de uso.
Como eu configuraria cada módulo para que cada um pudesse carregar seu próprio arquivo de propriedades? No momento, movi PropertyPlaceHolderConfigurer dos arquivos de contexto separados e os mesclei no contexto do aplicativo principal (carregando todos os arquivos de propriedade com um único PropertyPlaceHolderConfigurer). No entanto, isso é uma merda, porque agora todos que usam o módulo dao precisam saber que precisam de um PropertyPlaceHolderConfigurer em seu contexto .. também os testes de integração no módulo dao falham etc.
Estou curioso para saber sobre soluções / ideias da comunidade stackoverflow.
fonte
ignore-unresolvable="true"
, caso contrário, será necessário.ignoreUnresolvablePlaceholders
? O que são marcadores de posição não resolvíveis?PropertySourcesPlaceholderConfigurer
é a implementação de suporte padrão desde Spring 3.1, portanto, é sensato usar em vez dePropertyPlaceholderConfigurer
como a classe de implementação do bean.Eu sei que essa é uma pergunta antiga, mas o
ignore-unresolvable
imóvel não estava funcionando para mim e eu não sabia por quê.O problema era que eu precisava de um recurso externo (algo como
location="file:${CATALINA_HOME}/conf/db-override.properties"
) e oignore-unresolvable="true"
não faz o trabalho neste caso.O que se precisa fazer para ignorar um recurso externo ausente é:
Apenas no caso de alguém esbarrar nisso.
fonte
ignore-unresolvable
eignore-resource-not-found
servem a propósitos diferentes. Para evitar erros quando o arquivo de propriedades não existe, useignore-resource-not-found="true"
. Para evitar erros ao usar uma propriedade que não existe no arquivo , useignore-unresolvable="true"
. Se você tiver vários arquivos, cada um contendo conjuntos parciais de propriedades, e cada arquivo pode ou não existir, você precisará usar ambos.Você pode ter vários
<context:property-placeholder />
elementos em vez de declarar explicitamente vários beans PropertiesPlaceholderConfigurer.fonte
O
PropertiesPlaceholderConfigurer
bean possui uma propriedade alternativa chamada "propertiesArray". Use-a em vez da propriedade "propriedades" e configure-a com uma<array>
das referências de propriedade.fonte
Tentei a solução abaixo, funciona na minha máquina.
fonte: http://www.baeldung.com/2012/02/06/properties-with-spring/
fonte