Java 如何使用Tomcat 8 + Spring Boot + Maven
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24124193/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to use Tomcat 8 + Spring Boot + Maven
提问by Evandro Pomatti
According to the Reference API on Using Tomcat 8and this Deploy Spring Boot Applicationstutorial it should be possible to use Tomcat 8 with Spring Boot, which uses Tomcat 7 as default.
根据使用 Tomcat 8的参考 API和这个部署 Spring Boot 应用程序教程,应该可以将 Tomcat 8 与Spring Boot一起使用,它默认使用 Tomcat 7。
For some reason it is not working for me. What am I doing wrong?
出于某种原因,它对我不起作用。我究竟做错了什么?
pom.xml
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
示例控制器.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);
}
}
Output is Starting Servlet Engine: Apache Tomcat/7.0.52
输出正在启动 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.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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)
I have already tried this newer RC version of Spring boot, but still Tomcat 7 is loaded instead of 8.
我已经尝试过这个较新的 RC 版本的 Spring boot,但仍然加载了 Tomcat 7 而不是 8。
Also adding <java.version>1.7</java.version>
property didnt work.
添加<java.version>1.7</java.version>
属性也不起作用。
Tried "application.properties" as well. Port is set as specified on start-up, but version of Tomcat remains the default 7.
也试过“application.properties”。端口设置为启动时指定,但Tomcat的版本保持默认7。
application.properties
应用程序属性
server.port=8081
tomcat.version=8.0.3
采纳答案by M. Deinum
When using Spring Boot overriding tomcat with tomcat.version
as a property will only work if you use spring-boot-starter-parent
as a parent for your project.
当使用 Spring Boot 覆盖 tomcattomcat.version
作为属性时,仅当您spring-boot-starter-parent
用作项目的父项时才有效。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.0.M2</version>
</parent>
(change the version to the one you like).
(将版本更改为您喜欢的版本)。
<properties>
<tomcat.version>8.0.8</tomcat.version>
</properties>
If you don't want to use this as a parent you will have to use a <dependencyManagement>
section in your pom.xml to override all the spring versions and leave the properties as above.
如果您不想将其用作父级,则必须使用<dependencyManagement>
pom.xml 中的一个部分来覆盖所有 spring 版本并保留上述属性。
<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>
Either way will work but extending the parent is the easiest I would say, however this isn't always possible.
无论哪种方式都可以,但我会说扩展父级是最简单的,但这并不总是可行的。
回答by hd1
Did you try overriding tomcat.version in your application.properties? Specifically, setting it to 8.0.3 makes spring boot run 8.0.3 instead of whatever the default is.
您是否尝试在 application.properties 中覆盖 tomcat.version?具体来说,将其设置为 8.0.3 会使 spring boot 运行 8.0.3 而不是默认值。
回答by aaiezza
I can answer this question the same way I answered it in another thread. A key piece of information that I think some people are unaware of that Spring Boot is only a mock of an actually Java Servlet container like Jetty, Glassfish, Tomcat, etc. You as the developer have to choose which you will use.
我可以像在另一个线程中回答它一样回答这个问题。我认为有些人不知道 Spring Boot 的一个关键信息只是对实际 Java Servlet 容器(如 Jetty、Glassfish、Tomcat 等)的模拟。作为开发人员,您必须选择将使用哪个容器。
Spring Boot is decent but of course has its downfalls and was really only created by the spring.io team to make their tutorials look that much nicer in an attempt to compete with other 'Get up and running in seconds' technologies.
Spring Boot 很不错,但当然也有缺点,它实际上只是由 spring.io 团队创建的,目的是使他们的教程看起来更好,以试图与其他“在几秒钟内启动并运行”技术竞争。