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.
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"
}
}
]
}
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
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.
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.
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
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"}}]}
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