2017-03-06 1 views
1

J'ai une application basée sur spring-boot qui est déployée en pot. Il a une forme de Maven projet multi-module et contient des pièces suivantes:Spring Eureka Client ne voit pas le port du serveur depuis le fichier de configuration

  • web
  • Service
  • dépôt
  • modèle

Mon module web a besoin de tous les autres à se construire et contient dans son répertoire de ressources le fichier suivant:

  • bootstrap.yml

Le bootstrap.yml contient la configuration suivante:

eureka: 
    client: 
    eureka-server-port: 8761 
server: 
    port: 8763 
    context-path: /foo-service/rest 
spring: 
    application: 
    name: foo-service 

Je me attends que lors de réveil, il utilisera le port 8761 et s'inscrire au service Eureka. En raison de quelque raison quand je debug à:

org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration#eurekaInstanceConfigBean 

l'instance de EurekaInstanceConfigBean contient des valeurs suivantes:

  • instanceId = 172.20.39.197:foo-service:8763
  • nonSecurePort = 8080

Ce qui est bizarre est nonSecurePort mis sur 8080 au lieu de 8763. Dans mes autres services (qui fonctionne correctement) le nonSecurePort a la même valeur que la dernière partie de instanceId. Seulement dans foo-service la valeur est différente.

La raison de cela est:

@Value("${server.port:${SERVER_PORT:${PORT:8080}}}") 
int nonSecurePort; 

ne peut pas trouver la configuration et retourne la valeur par défaut. Mais pourquoi? J'ai vérifié le foo.jar créé par maven et le bootstrap.yml est là à l'endroit correct (BOOT-INF/classes/bootstrap.yml) avec les valeurs correctes ...

Quelqu'un a-t-il une idée de ce qui peut être? faux?

+0

Pourriez-vous fournir un exemple reproduisant le problème? –

+0

J'ai essayé de créer mais tous les échantillons simples fonctionnent pour moi. Seule cette application unique et complexe ne fonctionne pas. Quand je parviens à obtenir plus d'informations immédiatement partager ici. Mais merci! –

Répondre

0

La raison était suit:

L'application avait encore quelques vieilles propriétés chargées via xml:

@Configuration 
@ImportResource("some-xml-file") // which loads properties 
class FooConfig {} 

Les propriétés chargées par fichier XML n'a pas eu un port défini si sûr ce n'était pas cas de dérogation. Cependant, il semble qu'il ait suffi d'interférer avec Spring-Boot.

Après petit refactoring:

@Configuration 
@PropertySource("properties-file") // loading properties without xml 
class FooConfig {} 

tout a commencé à travailler.

0

J'ai le même problème.

Plusieurs applications de démarrage sont construites exactement de la même manière. Les applications utilisant @ImportResource s'enregistrent avec un port par défaut incorrect de 8080 avec Eureka.

Je ne pouvais pas encore m'éloigner de @ImportResource. Ajout de ce qui suit au fichier bootstrap.yml travaillé:

eureka: 
    instance: 
    non-secure-port: 8088