1、在idea中使用springboot打成war包并能部署到外部独立服务器中
第一步:新建一个SpringBootStartWarApplication类 继承 SpringBootServletInitializer类
SpringBootServletInitializer类作用:因为在外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,
此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法,这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似
【注意】:这个新建的类,与springboot的启动类是同级的
代码如下:
public class SpringbootStartWarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
//参数是springboot的启动类
return builder.sources(JspApplication.class);
}
}
第二步:修改pom.xml文件,目的是让springboot内嵌的tomcat在运行时不起作用。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除springboot中内置的tomcat,避免打成war包后和外部独立的tomcat冲突-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
第三步:在pom.xml文件中自定义打包后的包名,此包名会作为访问服务器的跟路径。还要在pom.xml中指定打成war包,不然默认会打成jar包。
<packaging>war</packaging>
<build>
<!--指定打包后的文件名称-->
<finalName>myFirstWar</finalName>
</build>
第四步:使用springboot中maven插件直接进行打包,建议先双击clean一下,再双击package即可。
第五步:打包完成后会出现在该项目的target目录下,将war包复制一份并粘贴到tomcat安装目录下的webapps中。
第六步: 进入tomcat目录下的bin目录中双击运行startup.bat文件启动tomcat服务器,
我这里的名字是startup9.bat。
最后就可以直接去服务器输入URL访问你部署的服务了。
2、解决SpringBoot打成war包后无法访问controller层(404)的问题
第一次打成war包被这个问题折磨了一个多小时,找了很多种方法,对我的问题都没用。
推荐一篇大佬的文章,虽然我的问题不是这些,但写的很好
链接:idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到 - 星朝 - 博客园
如果还是不能解决你的问题,就返回到上面的第五步,看看你外部运行的tomcat服务器版本和springboot中内嵌的版本是否一致。
如果不一致一定要改成一致的版本!!! 我的问题就是这么解决的。