2014-06-09 72 views
6

根据Using Tomcat 8Deploy Spring Boot Applications教程中的Reference API,应该可以使用Tomcat 8和Spring Boot,它使用Tomcat 7作为默认设置。如何使用Tomcat 8 + Spring Boot + Maven

由于某种原因,它不适合我。我究竟做错了什么?

的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); 
    } 
} 

输出是开始Servlet引擎:的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) 

我已经试过这newer RC version of Spring boot,但还是Tomcat的7,而不是装载的8

还加入<java.version>1.7</java.version>财产没有工作。

也试过了“application.properties”。在启动为指定的端口设置,但Tomcat版本保持默认7

application.properties

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

必须在maven pom中指定'tomcat.version'才能包含正确版本的Tomcat。这只有在你使用spring-boot-starter-parent作为父代依赖时才有效,否则它将不起作用。 –

+0

@ M.Deinum它的工作,tx。你可以发布你的答案,所以我可以标记为已解决? – BonanzaOne

+0

用两种可能的解决方案增加了更广泛的答案。 –

回答

10

当使用Spring Boot覆盖tomcat tomcat.version作为属性时,只有当您使用spring-boot-starter-parent作为项目的父项时才会起作用。

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

(将版本更改为您喜欢的版本)。

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

如果你不想使用此作为家长,你将不得不使用一个<dependencyManagement>部分在你的pom.xml覆盖所有的春季版本,并留下如上的属性。

<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> 

无论哪种方式都可以,但扩展父母是最简单的我会说,但这并非总是可行。

2

你有没有try overriding tomcat.version in your application.properties?具体来说,将其设置为8.0.3会使spring boot运行8.0.3,而不是默认值。

+0

感谢您的答案,但我在这里尝试,它没有奏效。正如教程所说的:“更小的东西,比如服务器运行的端口”。此外,文档不指向属性文件,但仅用于类路径依赖项。 – BonanzaOne

+0

是否在您的类路径的根目录下有application.properties?这对我来说可以。 – hd1

+0

是的,我还将端口设置为8081以确保文件被读取。 [本教程](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-tomcat8-jsp)也使用Tomcat 8,并没有该属性在属性文件上设置,仅在pom.xml中。 – BonanzaOne

0

我可以用我在another thread回答的同样的方式来回答这个问题。我认为有些人并不知道Spring Boot只是模拟实际的Java Servlet容器,比如Jetty,Glassfish,Tomcat等等。您作为开发人员必须选择您将要使用的模块。

Spring Boot很不错,但当然有其不足之处,当然它的缺点只是由spring.io团队创建的,他们的教程看起来更好看,以便与其他“在几秒钟内启动并运行”技术竞争。

相关问题