2015-04-21 13 views
6

Mam aplikację Spring Boot wdrożoną w zewnętrznym kontenerze Tomcat (bez użycia osadzonego kontenera) i próbuję ustawić napęd. Problem w tym, że management.port w application.properties nie wydaje się być honorowany przez Tomcat. Kiedy uruchamiam Spring Boot z wbudowanym Tomcat, działa dobrze.Port aktywatora sprężynowego po zainstalowaniu na zewnętrznym kontenerze Tomcat

na przykład ma następujący zestaw w application.properties:

management.port=9010

punktów końcowych robocze dla osadzonego kontenera

  • http://localhost:9010/health

dla -Praca punkty końcowe do pojemnika zewnętrznego uruchomione na porcie 8080

  • http://localhost:9010/health
  • http://localhost:8080/health
  • http://localhost:9010/<appName>/health
  • http://localhost:8080/<appName>/health

Czy istnieje specjalna konfiguracja muszę w pojemniku Tomcat narazić Punkt końcowy siłownika sprężyny rozruchowej?

Próbowałem ustawić zmienną środowiskową MANAGEMENT_PORT. Większość (prawie cała) dostępna dokumentacja używa wbudowanego Tomcata, więc znalezienie tego problemu okazało się trudnym zadaniem.

Trzeci komentarz dotyczący tej odpowiedzi dostarczył pewnej możliwej wglądu: https://stackoverflow.com/a/28689853/2601060, która wskazuje na plik GitHub wskazujący, że jeśli port zarządzania nie jest ustawiony, będzie taki sam, jak port serwera.

+0

Opublikowany link zawiera odpowiedź wyjaśniającą, że dla aktora jest używane oddzielne wystąpienie podczas używania wbudowanego tomcat. Prawdopodobnie to nie zadziała przy wdrażaniu zewnętrznego tomcat. Być może istnieje sposób, aby osiągnąć to, co chcesz zrobić, ale musi to być zewnętrzna konfiguracja kociego tomcat, właściwości wbudowanego tomcat nie będą działać. –

+0

@ci_ dzięki za odpowiedź - czy wiesz o jakimkolwiek sposobie konfiguracji tego w zewnętrznym tomcat? – mnd

+0

Niestety nie, lub bym opublikował odpowiedź. Właśnie skomentowałem, aby wskazać ci właściwy kierunek. Używamy tu osobnej ścieżki kontekstowej dla aktorów, a nie oddzielnego portu. –

Odpowiedz

0

Tak, jeśli właściwość application.properties ma właściwość o nazwie "manage.port: 9001" i "server.port: 9000". Następnie punkty końcowe aplikacji zostaną rozmieszczone na porcie 9000, a punkty końcowe siłownika zostaną wdrożone na porcie 9001.

Tak do nas. Możemy wymienić obie właściwości z tym samym portem, aplikacja będzie działać poprawnie.

0

W jakiej wersji Java korzystasz z Tomcat7?

N.B.To wszystko spekulacje - nie byłem jeszcze w stanie tego zweryfikować.

Jeśli to Java6 (i domyślam się, że to dlatego, że pojawia się podobny problem), podejrzewam, że jest to związane z następującym komunikatem:

INFO: JSR 356 websocket (Java websocket 1,1) wsparcie nie jest dostępny gdy działa na Java 6. Aby wyłączyć ten komunikat, należy uruchomić Tomcat na Java 7, wyjąć słoiki websocket od $ CATALINA_HOME/lib lub dodać sędziów WebSocket do właściwości tomcat.util.scan.DefaultJarScanner.jarsToSkip w $ CATALINA_BASE/conf/catalina.properties. Zauważ, że dostępny będzie wycofany interfejs Tomcat 7 WebSocket API .

Mogę tylko zgadywać, że wiosna Boot stosowanie na JSR356 powiedzieć Web App kontenera do „oprócz słuchania domyślny port dla głównego aplikacji, a także słuchać na porcie X dla końcowych siłowników” .. i to nie jest dostępne pod Java6 ... Prawdopodobnie jestem w błędzie.

Jeśli ktokolwiek mógłby potwierdzić/odrzucić to zachowanie, zaktualizuję tę odpowiedź.

Po ustawieniu Tomcat używać Java8 i usuwanie słoiki gniazda (tomcat7-websocket.jar & websocket-api.jar słoiki), otrzymuję following message from Spring:

osbaaEndpointWebMvcAutoConfiguration: Nie można uruchomić wbudowany pojemnik zarządzania na innym porcie (punkty końcowe są zarządzania nadal dostępne za pośrednictwem JMX)

W międzyczasie @ obejście DecipherX (tzn nie ustawisz management.port=9010) będzie wystawiać swoje punkty końcowe siłownika th szorstki port domyślny.

0

Aby punktów końcowych siłownik pracuje do wdrożenia aplikacji rozruchowego wiosna wojna z zewnętrznego serwera Tomcat. 1) Zdejmij zarządzania * Konfiguracje application.properties

2) Twój URL roboczego byłoby http://localhost:8080//zdrowie

Powiązane problemy