查询Springboot项目打war包的方法,在网上有很多,但是主要的思路都是将springboot中内置的tomcat去掉,重写启动主方法,多查查总有一款是适合你的,我就是查了大概一周!!!困惑了一周!!!!也看到许多人问也是按照网上的方法去设置依赖,重写方法,为什么不好用呢,我刚开始也是这样,但是我新建了一个小的springboot项目去试了一下网上的方法,是可以使用,下面写出需要更改的地方。
去掉内置的tomcat,有两个方法:
方法一、这个亲测好用
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
方法二、这个我没有试验
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!– 移除嵌入式tomcat插件 –>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
因为springboot是没有web.xml文件的,所以需要一下设置。你也可以试试给springboot添加web.xml。
<build>
<finalName>learnspringboot</finalName>
<!--打包后war包的名称-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
下面重写启动类:
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
以上就可以将springboot项目进行打war包部署到tomcat中,但这个时候我自己的问题并没有解决,我出现了很多小伙伴说的项目部署到tomcat中可以启动,没有任何错误,但是启动报错404,空白页,访问不了等等,我的问题是这么解决的,我是访问路径问题,我的数据库连接只能识别/login,但是war包访问需要加上war包名称,比如http://localhost:8080/learnspringboot/login,这样我自己的拦截器在识别路径的时候识别的是/learnspringboot/login,那就找不到登录信息,就会跳到/error界面,问题分析原因都是通过对比tomcai启动war的后台日志与在idea中启动springboot的后台日志,以及代码发现的。所以我只要让我访问的路径是http://localhost:8080/login 那么就是访问不需要加war名称,那么就在tomcat的server.xml中进行设置。
我的是这么设置,可能跟网上的不太一样,我不太懂区别,但是我自己的我用着好用哈。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/learnspringboot" path="" reloadable="true" crossContext="true"/>
<!-- 上面这段是我插入标签 docBase是war包名称-->
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
然后我的就可以访问成功,如果大家遇到相似的问题,大家一定要耐心看区别,因为网上查的部署方法,是有好用的,可能你的项目本身建设影响了你的访问,如果对大家有帮助那就太好了,因为我在这憋了太久了,如果有不对请指出,本人也只是个新手,本文也是参考了好多大神的帖子。。。