2014-06-09 5 views
6

Secondo l'API di riferimento su Using Tomcat 8 e questo tutorial Deploy Spring Boot Applications dovrebbe essere possibile utilizzare Tomcat 8 con Spring Boot, che utilizza Tomcat 7 come predefinito.Come utilizzare Tomcat 8 + Spring Boot + Maven

Per qualche motivo non funziona per me. Che cosa sto facendo di sbagliato?

pom.xml

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<properties> 
    <tomcat.version>8.0.3</tomcat.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <version>1.0.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.0.5.RELEASE</version> 
    </dependency> 
</dependencies> 

SampleController.java

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

@Controller 
@EnableAutoConfiguration 
public class SampleController { 

    @RequestMapping("/") 
    @ResponseBody 
    String home() { 
     return "Hello World!"; 
    } 

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

uscita è partire Servlet motore: Apache Tomcat/7.0.52

:: Spring Boot ::  (v1.0.2.RELEASE) 

2014-06-09 13:55:27.688 INFO 5744 --- [   main] SampleController       : Starting SampleController on CI01081252 with PID 5744 (started by TECBMEPI in D:\projetos\teclogica\testes automatizados\exemplo int db\workspace\spring-boot-tomcat8-maven) 
2014-06-09 13:55:27.730 INFO 5744 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]33b45e9a: startup date [Mon Jun 09 13:55:27 BRT 2014]; root of context hierarchy 
2014-06-09 13:55:28.869 INFO 5744 --- [   main] .t.TomcatEmbeddedServletContainerFactory : Server initialized with port: 8081 
2014-06-09 13:55:29.117 INFO 5744 --- [   main] o.apache.catalina.core.StandardService : Starting service Tomcat 
2014-06-09 13:55:29.118 INFO 5744 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 
2014-06-09 13:55:29.226 INFO 5744 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext 
2014-06-09 13:55:29.226 INFO 5744 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 1498 ms 
2014-06-09 13:55:29.656 INFO 5744 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 
2014-06-09 13:55:29.658 INFO 5744 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
2014-06-09 13:55:29.946 INFO 5744 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-06-09 13:55:30.035 INFO 5744 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto java.lang.String SampleController.home() 
2014-06-09 13:55:30.059 INFO 5744 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-06-09 13:55:30.059 INFO 5744 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2014-06-09 13:55:30.236 INFO 5744 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2014-06-09 13:55:30.257 INFO 5744 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081/http 
2014-06-09 13:55:30.259 INFO 5744 --- [   main] SampleController       : Started SampleController in 2.933 seconds (JVM running for 3.318) 

Ho già provato questo newer RC version of Spring boot, ma ancora Tomcat 7 viene caricata invece di 8.

aggiungendo anche <java.version>1.7</java.version> struttura era rotta.

Provato anche "application.properties". Port è impostato come specificato in fase di start-up, ma versione di Tomcat rimane quello predefinito 7.

application.properties

server.port=8081 
tomcat.version=8.0.3 
+1

'tomcat.version' deve essere specificato nel maven pom per includere la versione corretta di Tomcat. Che funzionerà solo se si utilizza lo spring-boot-starter-gen come dipendenza genitore altrimenti non funzionerà. –

+0

@ M.Deinum Ha funzionato, tx. Puoi pubblicare la tua risposta in modo da poter contrassegnare come risolto? – BonanzaOne

+0

Aggiunta una risposta un po 'più ampia con 2 possibili soluzioni. –

risposta

10

Quando si utilizza Tomcat di avvio di avvio con tomcat.version come proprietà funzionerà solo se si utilizza spring-boot-starter-parent come genitore per il progetto.

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.0.M2</version> 
</parent> 

(cambiare la versione in quella che più ti piace).

<properties> 
    <tomcat.version>8.0.8</tomcat.version> 
</properties> 

Se non si desidera utilizzare questo come un genitore si dovrà utilizzare una sezione <dependencyManagement> nel vostro pom.xml per ignorare tutte le versioni di primavera e lasciare le proprietà di cui sopra.

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-core</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-el</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-logging-juli</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-websocket</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jdbc</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jsp-api</artifactId> 
      <version>${tomcat.version}</version> 
     </dependency> 
    </dependencies> 

</dependencyManagement> 

In entrambi i casi funziona, ma estendendo il genitore è il più facile direi, tuttavia questo non è sempre possibile.

2

Ti è try overriding tomcat.version in your application.properties? In particolare, impostandolo su 8.0.3, l'avvio a molla esegue 8.0.3 invece di qualsiasi valore predefinito.

+0

Grazie per la risposta, ma ho provato qui e non ha funzionato. Come dice il tutorial "Cose più piccole, come ad esempio su quale porta viene eseguito il server". Inoltre, la documentazione non punta al file delle proprietà, ma solo per le dipendenze del classpath. – BonanzaOne

+0

È application.properties nella radice del classpath? Funziona bene per me. – hd1

+0

Sì, ho anche impostato la porta come 8081 per assicurarmi che il file sia letto. [Questo tutorial] (https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-tomcat8-jsp) utilizza anche Tomcat 8 e non ha quella proprietà impostata nel file delle proprietà, solo nel pom.xml. – BonanzaOne

0

Posso rispondere a questa domanda nello stesso modo in cui l'ho risposto in another thread. Un'informazione chiave che penso che alcune persone non siano consapevoli di quello Spring Boot è solo una finta di un contenitore Java Servlet come Jetty, Glassfish, Tomcat, ecc. Come lo sviluppatore deve scegliere quale usare.

Spring Boot è decente, ma naturalmente ha i suoi difetti ed è stato creato solo dal team spring.io per rendere i loro tutorial molto più belli nel tentativo di competere con le altre tecnologie "Get up and running in seconds".