web-dev-qa-db-fra.com

Le serveur de configuration Spring Cloud ne fonctionne pas avec le fichier de propriétés local

J'ai joué avec le projet Spring Cloud sur github situé ici: https://github.com/spring-cloud/spring-cloud-config

Cependant, j'ai eu quelques problèmes pour le faire lire un fichier de propriétés local au lieu d'extraire les propriétés de github. Il semble que spring ignore le fichier local même lorsque je supprime toutes les références à github. Une question similaire a été postée ici: Le serveur de configuration Spring-Cloud ignore le fichier de propriétés de configuration

Mais je n'ai pas encore vu de bonne réponse. Je me demande si quelqu'un peut m'indiquer un exemple? J'aimerais définir mes propriétés localement au lieu d'utiliser un dépôt Git de quelque type que ce soit. Je suppose que quelqu'un a déjà rencontré ce problème auparavant, et s'il existe un exemple quelque part, j'aimerais vraiment le voir afin que je puisse avancer dans la bonne direction.

10
user3270760

Tout mon code est ici https://github.com/spencergibb/communityanswers/tree/so27131143

src/main/Java/Application.Java

@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

src/main/resources/application.yml

spring:
  application:
     name: myconfigserver
  profiles:
     active: native

my:
  property: myvalue

src/main/resources/myapp.yml

my:
  otherprop: myotherval

Pour obtenir les propriétés d'une application nommée myapp, procédez comme suit.

curl http://localhost:8080/myapp/default

{
     "name": "default",
     "label": "master",
     "propertySources": [
          {
                "name": "applicationConfig: [classpath:/myapp.yml]",
                "source": {
                     "my.otherprop": "myotherval"
                }
          },
          {
                "name": "applicationConfig: [classpath:/application.yml]",
                "source": {
                     "spring.application.name": "myconfigserver",
                     "spring.profiles.active": "native",
                     "my.property": "myvalue"
                }
          }
     ]
}
14
spencergibb

Je suis en mesure de lire la configuration du service Apple (Test Micro Service) à l'aide du serveur de configuration Spring.

Exemple application.yml de l'application Spring Config

spring:
    profiles:
        active: native
    cloud:
        config:
            server:
                native:
                    searchLocations: classpath:config/
server:
  port: 8888


endpoints:
    restart:
      enabled: true

Placez vos fichiers .properties ou .yml dans le dossier src\main\resources\config. Assurez-vous que le nom de ces fichiers doit correspondre à spring.application.name de votre micro service.

Par exemple, si spring.application.name = Apple-service le fichier de propriétés doit être le dossier Apple-service.properties in src\main\resources\config .

Exemple bootstrap.yml du service Apple:

spring:
  application:
    name: Apple-service

cloud:
  config:
    uri: http://localhost:8888
5
rish1690

J'ai eu le même problème lors de l'exécution du serveur de configuration dans un environnement Mac OS. Cela ne s'est pas produit sous Linux ou Windows.

J'ai eu la propriété native définie dans le fichier bootstrap.yml comme ceci:

spring:
  profiles:
    active: native

Enfin, la façon dont cela a fonctionné pour moi sur le mac était de passer le profil actif au fichier jar, comme ceci.

Java -jar config-server.jar --spring.profiles.active=native

Je ne sais toujours pas pourquoi il se comporte différemment sous Mac OS.

2
Oreste

L'utilisation de spring.profiles.active = native est ce que la documentation de Spring semble suggérer, mais je n'ai pas réussi à la faire fonctionner. Mon fichier application.properties est

server.port=8888
spring.cloud.config.profiles=native 

mais la réponse de l'URL

http://localhost:8888/config-server/env

est 

{"name":"env","label":"master","propertySources":[{"name":"https://github.com/spring-cloud-samples/config-repo/application.yml","source":{"info.url":"https://github.com/spring-cloud-samples","info.description":"Spring Cloud Samples"}}]}

ce qui indique que le profil natif a été ignoré et que le serveur considère toujours github comme source de la propriété.

Un petit problème supplémentaire que j'ai rencontré est le port par défaut du service de configuration. Selon la documentation de Sprin Cloud Config, il devrait s'agir de 8888. Si je supprime server.port = 8888 de mon application.properties, le serveur de configuration démarre sur le port 8080, qui est le port de démarrage par défaut de Spring, mais pas celui que le serveur de configuration doit utiliser.

2
MrkK

J'ai pu le faire fonctionner avec la configuration du référentiel local et du bootstrap:

Java -jar spring-cloud-config-server-1.0.0.M3-exec.jar --spring.config.name=bootstrap

Le fichier bootstrap.yml est placé dans le dossier ./config/. 

server:
  port: 8080
spring:
  config:
    name: cfg_server
  cloud:
    config:
      server:
       git:
        uri: /home/us/config_repo
        searchPaths: pmsvc,shpsvc
1
Genadyk

Le serveur de configuration lira les fichiers de propriétés locaux si le application.properties du serveur de configuration contient:

spring.profiles.active=native
**spring.cloud.config.server.native.searchLocations=file:/source/tmp**

dans le répertoire /source/tmp, vous stockez le fichier de propriétés local pour le client, par exemple:

http://localhost:8888/a-bootiful-client/default

tu auras:

{"name":"a-bootiful-client","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"file:/source/tmp/a-bootiful-client.properties","source":{"message":"Kim"}}]}
1
Kim Huang

J'ai eu le même problème sur mon ordinateur local, mais cela fonctionne bien sur mon serveur distant. 

La réponse de @ Oreste fonctionne pour moi. Alors j'ai vérifié à nouveau le journal des erreurs, et j'ai trouvé 

 2018-06-25 16:09:49.789  INFO 4397 --- [           main] t.p.a.s.api.user.UserServiceApplication  : The following profiles are active:  someProfileISetBefore

Donc, la raison principale de mon cas est que je mets une variable d'environnement avant, mais j'oublie de la supprimer. Et il remplace les fichiers de propriétés de l'application config.

J'espère que vous ne ferez pas l'erreur idiote comme moi. Fixé par:

 unset spring_profiles_active 
0
EdwinSZ