A cobertura de configuração é melhor do que o perfil
Na prática de produção, a cobertura de configuração é um método comum para resolver diferentes configurações em diferentes ambientes. Por exemplo, use arquivos de configuração no servidor de produção para substituir os arquivos no pacote ou usar um serviço de configuração centralizado para substituir a configuração de negócios padrão.
Comparado com o mecanismo de perfil (como o perfil do MAVEN e as propriedades específicas do perfil da Spring Boot), ambientes diferentes usam diferentes arquivos de configuração e o método de sobreposição é mais vantajoso. Os programadores não precisam se preocupar com o endereço, conta e outras informações do banco de dados do ambiente de produção durante o desenvolvimento. Eles podem correr em ambientes diferentes construindo uma vez. O mecanismo de perfil precisa escrever a configuração do ambiente de produção no arquivo de recursos do projeto, e diferentes parâmetros de construção ou parâmetros de operação devem ser usados para diferentes ambientes.
A Spring fornece recursos flexíveis de expansão de configuração, com várias maneiras de integrar fontes de atributos personalizadas, permitindo uma fácil cobertura de configuração.
Este artigo foi escrito com base na bota da primavera 1.4.8/primavera 4.3.12
Use a anotação @PropertySource para implementar arquivos de configuração personalizados e substituição de configuração
@ConfigurationProperties@ConfigurationPublic Classe Demoproperties {// Propriedades com getter/setters} @PropertySource (value = {"test.properties", "file: /etc/test.properties",}, ignoreReResourceNotfound = true) @configurationpublic Demoautoconfiguration {@autowired Demoproperties privadas; @PostConstruct public void init () {System.out.println (Demoproperties); }}Spring supports introducing custom configuration files using PropertySource annotations, where "test.properties" will cause Spring to load the file from classpath, "file:/etc/test.properties" will cause Spring to load the /etc/test.properties file from the file system, ignoreResourceNotFound = true makes Spring ignore the exception of file loading failure, that is, the configuration file is optional.
Ao mesmo tempo, desde que "arquivo: /etc/test.properties" está localizado após "test.properties", isso permite que o arquivo de configuração do sistema de arquivos substitua a configuração no ClassPath.
Fábrica de fontes de propriedade personalizada
Se você deseja personalizar a fonte da propriedade mais flexível, como o carregamento de configurações de um serviço de configuração centralizado, você pode implementar a interface PropertySourceFactory e configurar os parâmetros de fábrica da anotação PropertySource.
@Configuration@PropertySource (Value = ""/*Plante de espaço reservado*/, Factory = CompositePropertySourceFactory.Class) Classe pública CompositEconfigautoconfiguration {}O campo de valor é usado para especificar o arquivo de recursos correspondente à fonte de configuração. Se o arquivo de recursos não for necessário, ele poderá ser configurado como qualquer valor. O valor do parâmetro será passado para o método CreatePropertySource do parâmetro de fábrica.
Se o campo IgnoreReSourceNotFound for especificado como verdadeiro, a exceção lançada pela fábrica será ignorada, caso contrário, ela fará com que a startup falhe. Às vezes, é uma boa prática expor diretamente a falha de inicialização.
A definição da interface PropertySourceFactory é a seguinte:
/*** Interface de estratégia para criar invólucros {@link PropertySource} baseados em recursos. * * @Author Juergen Hoeller * @Since 4.3 * @See DefaultPropertySourceFactory * /Public Interface PropertySourceFactory { /** * Crie um {@link PropertySource} que envolve o recurso fornecido. * @param name the name of the property source * @param resource the resource (potentially encoded) to wrap * @return the new {@link PropertySource} (never {@code null}) * @throws IOException if resource resolution failed */ PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException;}Deve -se notar que o tempo de carregamento do PropertySourceFactory é anterior ao dos contêineres de feijão de primavera, para que a implementação não possa depender do COI da primavera.
PropertySourceFactory exige que a classe de implementação retorne o PropertySource. PropertySource é a interface principal da função de propriedade da mola (ou configuração) e possui muitas implementações, como:
As classes de implementação reais são muito inferiores a elas. Para fins específicos, você pode ler a documentação da mola ou o código -fonte.
O MapPropertySource e o CompositePropertySource são comumente usados ao personalizar fontes de propriedades.
O MapPropertySource pode ser usado para envolver os dados da propriedade que ele se carrega, consulte seu método de construção.
public MapPropertySource (nome da string, mapa <string, objeto> origem) {super (nome, fonte);}Este último pode carregar várias fontes de atributo combinando e personalizando o pedido de substituição. Por exemplo:
PropertySource <?> PackageInsidePropertySource = PackageInsidePropertySourceiteratELoader.LoadPropertySource (CompositePropertySource); compósitoPropertySource.AddPropertySource (PackageInsidePropertySource); PropertySource <? compósitoPropertySource.AddfirstPropertySource (OuterFilePropertySource);
O método AddFirstPropertySource pode definir o campo de propriedade de receber a maior prioridade (dentro deste compostoPropertySource), e o método AddPropertySource é o oposto e a prioridade é menor posteriormente.
Carregue todos os arquivos de configuração com o mesmo nome no pacote de jar de dependência
Carregar o arquivo de configuração diretamente do caminho de classe exige que o arquivo exista no caminho de classe. Considere em um projeto da web, se o arquivo existir em um pacote de jar de dependência, ou seja, ele estará localizado no web-inf/lib/xxx.jar, ele não pode ser carregado diretamente com base no caminho de classe. Neste momento, você pode usar o PathMatchingResourcepTatternResolver fornecido pela primavera para digitalizar todos os pacotes JAR por nome do recurso para obter o objetivo.
Lista privada <Source> getPackageInsideResourcesByPattern (String ResourceName) lança IoException {String ResourcepathPattern = ResourceptatternResolver.classpath_all_url_prefix + hbootConfigConstants.Configs + ResourceName; ResourcepTatternResolver ResourcePatternResolver = new PathMatchingResourCepTatternResolver (); Return Arrays.asList (ResourcePatternResolver.GetResources (ResourcepathPattern);} Em seguida, você pode usar o ResourcePropertySource para criar o PropertySource desde o recurso para passar para a primavera.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.