春季启动因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将弹簧启动项目打包成可发布到tomcat中战争的包项目呢?
1。既然需要打包成战争包项目,首先需要在砰的一声。xml文件中修改打包类型,将弹簧引导默认的& lt; packaging> jar修改为& lt; packaging> war形式;
2。其次弹簧引导的web项目中内嵌tomcat服务器,所以如果我们想要发布战争包到tomcat项目,要讲春天引导中内嵌的tomcat包依赖排除,不然产生冲突,打开下面代码中的注释即可。
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-web & lt; ! & lt; exclusions> & lt; exclusion> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-tomcat & lt;/exclusion> & lt;/exclusions> ——比; & lt;/dependency>
有一点想说的是,如果本地开发的时候依然想要使用弹簧引导内嵌tomcat进行调试,添加如下依赖即可。
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-tomcat & lt; scope> provided & lt;/dependency>
3。弹簧引导发布jar包网络程序的入口是主要函数所在的类,使用@SpringBootApplication注解。但是如果战争包发布至tomcat,需要增加SpringBootServletInitializer子类,并覆盖它的配置方法,或者直接将主要函数所在的类继承SpringBootServletInitializer子类,并覆盖它的配置方法。代码举例如下,
@SpringBootApplication 公开课DemoApplication延伸SpringBootServletInitializer { @Override 保护SpringApplicationBuilder配置( SpringApplicationBuilder应用程序){ 返回application.sources (DemoApplication.class); } 公共静态void main (String [] args) { SpringApplication.run (DemoApplication.class, args); } }
以上就完成了弹簧启动项目打包战争包的所有步骤,可以发布至tomcat7及其以上版本。
但是以上流程改造完春天引导打包战争包发布至tomcat6版本之后,浏览器访问项目地址会给404年出的错误?为什么呢,一头雾水,经过我一番查阅资料以及实验,得出以下结论,
首先弹簧引导支持的servlet容器如下,可以看出弹簧引导最低支持的servlet版本是3.0,但是tomcat6的servlet版本是2.5,这样的话上面的流程是无法支持tomcat6发布弹簧启动项目的,
谷歌了但是又一番,发现已经有人在解决这个问题了,https://github.com/dsyer/spring-boot-legacy
1。pom.xml中添加spring-boot-legacy的依赖,
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-legacy & lt; version> 1.1.0.RELEASE & lt;/dependency>
2。手动替换网络。xml文件。但是在发布战争包中发现metricFilter提示空指针异常,我就简单粗暴的将滤过滤了,注释如下。所要替换的网络。xml文件的未知如下:{工程目录}/src/main/webapp/web - inf/web . xml
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; web version=" 2.5 " xmlns=" http://java.sun.com/xml/ns/javaee " xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”比; & lt; context-param> & lt; param-name> contextConfigLocation & lt; param-value> com.example.DemoApplication & lt;/context-param> & lt; listener> & lt; listener-class> org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener & lt;/listener> & lt; ! & lt; filter> & lt; filter-name> metricFilter & lt; filter-class> org.springframework.web.filter.DelegatingFilterProxy & lt;/filter> & lt; filter-mapping> & lt; filter-name> metricFilter & lt; url-pattern>/* & lt;/url-pattern> & lt;/filter-mapping> ——比; & lt; servlet> & lt; servlet-name> appServlet & lt; servlet-class> org.springframework.web.servlet.DispatcherServlet把弹簧启动项目发布tomcat容器(包含发布到tomcat6的方法)