2017-07-18 1 views
2

je les exigences suivantes:Spring Nuage Config serveur - Configurer le serveur pour obtenir des propriétés communes d'une des propriétés de dépôt et d'application constituent un référentiel différent

  • Il y a un git (commonRepo) avec un application.yml fichier contenant des propriétés communes à toutes les applications.
  • Il y a un autre git (applicationRepo) avec les fichiers de configuration des applications: app1.yml, app2.yml, etc.

Le but de cela est d'avoir toutes les propriétés communes centralisées dans une prise en pension avec spécifique écrire des autorisations.

J'ai besoin de configurer le serveur Spring-Cloud Config pour lire les deux prises en pension, avec la priorité suivante:

applicationRepo: appX.yml> applicationRepo: application.yml> commonRepo: application.yml

Est-il possible de le configurer pour le faire?

+0

Malheureusement, je ne l'ai pas essayé moi-même, mais Si vous n'avez rien trouvé d'utile en ligne, essayez les docs officiels http://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.3.1.RELEASE/ - ils ont une section sur la correspondance des motifs et plusieurs référentiels, qui pourraient vous aider – maydawn

+1

Ce n'est pas le cas. La fonctionnalité de référentiels multiples est destinée à séparer la configuration par équipe. Il s'arrête une fois qu'un match est trouvé. – spencergibb

+0

@spencergibb pensez-vous qu'il pourrait être considéré comme une fonctionnalité future? Je pense que c'est un peu nécessaire, dans notre société certaines propriétés telles que la configuration de base de données (url, db user, db password) ne peuvent être configurées que par une équipe d'infrastructure, c'est pourquoi nous avons besoin d'un repo différent. équipe pour mettre à jour les accessoires – codependent

Répondre

1

Ce fut ma config initiale:

spring: 
    application: 
    name: config-server 
    cloud: 
    config: 
     server: 
     git: 
      uri: file:///home/codependent/git/scc-dev 
      repos: 
      dev: 
       pattern: '*/dev' 
       uri: file:///home/codependent/git/scc-dev 
      pre: 
       pattern: '*/pre' 
       uri: file:///home/codependent/git/scc-pre 
      pro: 
       pattern: '*/pro' 
       uri: file:///home/codependent/git/scc-pro 

Il y a une prise en pension par défaut dans le cas où il n'y a pas de match de l'environnement et trois prises en pension selon un motif.

L'idée est d'avoir un autre dépôt de base (avec la priorité la plus basse) qui serait toujours chargé et dépend également de l'environnement. Ce repo de base contient un fichier application.yml avec des propriétés partagées gérées par une équipe différente.

Apparemment, il n'y a aucun moyen de le faire via les propriétés de YML donc je devais définir les haricots manuellement, c'est le code nécessaire pour le faire:

@Bean 
    public EnvironmentRepository baseEnvironmentRepository(){ 
     ConfigurableEnvironment ce = new StandardServletEnvironment(); 
     PatternMatchingJGitEnvironmentRepository devRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-ops-dev"); 
     devRepo.setEnvironment(ce); 
     devRepo.setForcePull(false); 
     devRepo.setPattern(new String[]{ "*/dev" }); 

     PatternMatchingJGitEnvironmentRepository preRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-ops-pre"); 
     preRepo.setEnvironment(ce); 
     preRepo.setForcePull(false); 
     preRepo.setPattern(new String[]{ "*/pre" }); 

     PatternMatchingJGitEnvironmentRepository proRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-ops-pro"); 
     proRepo.setEnvironment(ce); 
     proRepo.setForcePull(false); 
     proRepo.setPattern(new String[]{ "*/pro" }); 

     Map<String, PatternMatchingJGitEnvironmentRepository> map = new HashMap<>(); 
     map.put("dev", devRepo); 
     map.put("pre", preRepo); 
     map.put("pro", proRepo); 

     MultipleJGitEnvironmentRepository multiple = new MultipleJGitEnvironmentRepository(new StandardServletEnvironment()); 
     multiple.setUri("file:///home/codependent/git/scc-ops-dev"); 
     multiple.setRepos(map); 
     multiple.setOrder(Ordered.LOWEST_PRECEDENCE); 
     return multiple; 
    } 

    @Bean 
    public EnvironmentRepository environmentRepository(){ 
     ConfigurableEnvironment ce = new StandardServletEnvironment(); 
     PatternMatchingJGitEnvironmentRepository devRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-dev"); 
     devRepo.setEnvironment(ce); 
     devRepo.setForcePull(false); 
     devRepo.setPattern(new String[]{ "*/dev" }); 

     PatternMatchingJGitEnvironmentRepository preRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-pre"); 
     preRepo.setEnvironment(ce); 
     preRepo.setForcePull(false); 
     preRepo.setPattern(new String[]{ "*/pre" }); 

     PatternMatchingJGitEnvironmentRepository proRepo = new PatternMatchingJGitEnvironmentRepository("file:///home/codependent/git/scc-pro"); 
     proRepo.setEnvironment(ce); 
     proRepo.setForcePull(false); 
     proRepo.setPattern(new String[]{ "*/pro" }); 

     Map<String, PatternMatchingJGitEnvironmentRepository> map = new HashMap<>(); 
     map.put("dev", devRepo); 
     map.put("pre", preRepo); 
     map.put("pro", proRepo); 

     MultipleJGitEnvironmentRepository multiple = new MultipleJGitEnvironmentRepository(new StandardServletEnvironment()); 
     multiple.setUri("file:///home/codependent/git/scc-dev"); 
     multiple.setRepos(map); 
     multiple.setOrder(Ordered.HIGHEST_PRECEDENCE); 
     return multiple; 
    }