springBoot 项目war包部署及改为war包后资源路径错误问题

参考资料:

        https://blog.csdn.net/rico_zhou/article/details/83415114

        https://blog.csdn.net/pz641/article/details/85029431

        https://blog.csdn.net/m0_37981898/article/details/82155912

因为一些特殊需要,要将springboot 项目由jar包改为war包发布,记录实现的过程和出现的问题:

  1. 首先,将pom.xml中打包配置改成war

     

2. springboot中自带tomcat,打jar包会用这个tomcat启动,我们需要打包的时候排除这个自带的tomcat,有两种方式(以下图片来自网络(自己实在不想截图了..))

    方式一:

           

 方式二:  建议使用

                 

3. 更改启动类,继承SpringBootServletInitializer ,覆盖configure(),把启动类Application注册进去, 注意: 此类需要放在Application启动类同级目录

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * springboot 项目打成war包访问,初始化启动Spring应用上下文
 * @author qxl
 *
 */
public class SpringBootStartApplication extends SpringBootServletInitializer {
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

}

    4. 打war包发布,两种方式

      方式一 :  执行:mvn clean package ,打包结束后即可在target文件夹中找到war包,或者在eclipse中右击项目>Run as>Maven install打包结束同样在target目录下找到war

      方式二 :   idea 工具导出war包

  5. 部署到 tomcat, springBoot不同版本内置tomcat版本是不一样的(下面的图也是截的别人的),这里建议使用8.5以上版本

     

   将项目部署到tomcat后启动,项目是可以启动的,但是很多资源文件失效找不到了,原因是tomcat启动项目,需要带上项目名,之前jar包访问资源路径没有项目名,导致资源路径错误

   解决方案有两种: (注意,以下两种方式一定要删除ROOT文件夹,否则会有问题)

    一 : 模拟Tomcat启动页面,替换 ROOT文件夹

          将webapps目录下的ROOT文件夹删除,将自己的war包更名为ROOT.war,重新启动tomcat,浏览器中输入localhost:8080即可访问

         

   二 :  修改tomcat配置,不需要项目名访问,还是需要先删除ROOT文件夹

            修改conf目录下server.xml

             

           修改host内容,将

                  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 

           改为 : 

               <Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true">

               <Context docBase="webapps/你的项目名" path="" reloadable="true" source="org.eclipse.jst.jee.server:你的项目名"/>

          如下图,改之前:

            

           改之后:(vrs为项目名称)

               

                 修改好之后运行tomcat,可以不需要项目路径访问项目,也就是说访问 http://localhost:8080就行了

        

   

     

        

    

原文地址:https://www.cnblogs.com/huaixiaonian/p/10521460.html