2014-07-17 16 views
5

Podążałem za this tutorial. Teraz, jeśli używam go przez Spring Boot, działa, ale jeśli spróbuję go wdrożyć (usunąć klasę aplikacji) na serwerze Apache Tomcat 7, otrzymam 404 odpowiedzi. Próbowałem także utworzyć własną konfigurację - coś takiego:Aplikacja Spring Boot nie działa po wdrożeniu w autonomicznym Tomcat

@Configuration 
public class MongoConfiguration { 

    public @Bean MongoDbFactory mongoDbFactory() throws Exception { 
     return new SimpleMongoDbFactory(new Mongo("127.0.0.1", 27017), "movies"); 
    } 

    public @Bean MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongoDbFactory()); 
    } 
} 

Nadal nie działa. Tak więc 2 pytania.

  1. jak uruchomić to na Tomcat (jak zrobić prosty odpocząć i uruchomienia na tomcat)
  2. jak skonfigurować Mongo poprzez adnotacji (tak, aby moje bazy danych)

Uwaga: domyślnie używa testowego działającego wiosennego rozruchu i mogę sprawić, żeby działał on przez proste kontrolery (zamiast @RepositoryRestResource), ale chcę móc zawinąć http://localhost:8080 i uzyskać odpowiedź z opcjami.

Odpowiedz

19

Czy upewniłeś się, że postępujesz zgodnie z section on traditional deployments dokumentacji referencyjnej Boot? Z tego, co opisujesz, to nie wygląda na to, że Spring Data REST lub MongoDB nie działają, ale wdrożenie w ogóle nie działa.

Sztuką powinien pozwolić główną klasę konfiguracji trzeba wdrożyć specjalny interfejs, tak że pojemnik serwletów można znaleźć konfigurację Bootstrap (próbki pobranej z docs odniesienia):

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
    } 
} 

SpringBootServletInitializer jest kluczowy aspekt, ponieważ jest to typ, który łączy się z mechanizmem ładującym w Servlet 3 dla tradycyjnych aplikacji internetowych. Dokumenty referencyjne mają także instructions sposób uruchamiania aplikacji rozruchowej w kontenerach serwletów przed serwletem 3.0.

Należy również zauważyć, że gdy aplikacja jest wdrażana w osobnym kontenerze, zwykle nie jest dostępna za pośrednictwem katalogu głównego (tj. http://localhost:8080/), ale dedykowany kontekst nazwany po wdrożeniu pliku WAR (na przykład http://localhost:8080/my-app).

+0

extends Brakuje SpringBootServletInitializer. Próbowałem usunąć tę klasę aplikacji i umieścić w pliku web.xml, ale chciałem, aby działało w ten sposób, ponieważ jest o wiele łatwiejsze do odczytania. Dziękuję Ci bardzo. O wdrożeniu na localhost - korzystałem z "@RequestMapping" na "/" i dało mi to odpowiedź na localhost bez/myapp, ale to było wtedy, gdy użyłem web.xml i "@Controller" + wprowadziłem je przez wiosnę narzędzie garnitur (kiedy ręcznie uruchomić tomcat oczywiście potrzebowałem/myapp) Jeszcze raz bardzo dziękuję za odpowiedź. – unknown

1

Wpadłem na inną wersję tego problemu, która była spowodowana wersją java. Wszystkie konfiguracje były poprawne w pom.

<properties> 
    ...  
    <tomcat.version>8.0.39</tomcat.version> 
    <java.version>1.8</java.version> 
    ... 
</properties> 

Okazuje się, że serwer został uruchomiony OpenJDK wersji 7. Nie było żadnych błędów w dziennikach tomcat na starcie, ale również nie ma wyjścia z zastosowania sprężyny.

Po aktualizacji serwera do Oracle JDK w wersji 8 wszystko zaczęło się dobrze.

+0

Przydatne, aby wiedzieć. Dziękuję, chociaż się spóźniłem, nie widziałem tego wcześniej w powiadomieniach. – unknown

0

Wpadłem na ten sam problem z nowszym Tomcat (7.0.82). Po inne rozwiązania opisane tutaj nie wyszło mi udało mi się rozwiązać ten problem poprzez wdrożenie innej klasy ServletInitializer.java:

import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 

public class ServletInitializer extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(MyApp.class); 
    } 
} 

zamiast przedłużenia MyApp.java:

... 
@SpringBootApplication 
public class MyApp extends SpringBootServletInitializer { 
    ... 
} 

Zobacz https://www.youtube.com/watch?v=92ceKwUZoA0 Pełną seminarium.

Powiązane problemy