SpringBoot项目打包war包时无法运行问题

860 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

现实的情况下遇见过该问题刚好记录一下!

SpringBoot项目打包

首先默认创建的maven springBoot项目进行代码的clean 和 install进行项目打包的时候默认是使用jar 包的形式进行打包的,如果需要进行war 包打包部署的话就需要修改相应的 数据内容了

jar 包 和 tomcat 包

  • jar 包打完之后进行部署的时候使用 java -jar 的启动方式进行启动 可以设置相应的虚拟机参数 部署完成之后 看不得内部的相关文件信息对于文件的安全性比较高。 启动脚本示例:
nohup /opt/jdk8/bin/java -server -Xms4G -Xmx4G -XX:MaxMetaspaceSize=256m -Xmn1G -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled  -jar /opt/api/xx.jar --spring.profiles.active=prod > /opt/logs/xx.out 2>&1 &
  • war 包的话是依赖于类似与tomcat之类的容器进行解析部署的 一般而言都是 以下方式启动 war启动的时候将war包丢到相应tomcat webapps 路径下面就行

image.png

cd /tomcat/bin 
chmod -x *.sh
sh catalina.sh run

对于war包来说 可能对于一些变化大的包便于维护 比如前后端 不分离的项目如果临时需要改部分页面以及配置信息可以临时修改而不用全部项目打包升级。

实际问题及解决方式

问题

在实际开发过程中使用的就是springboot项目开发然后并且选择的的打包方式上也是使用了war的模式但是在实际打算提交测试的时候发现war打出来之后在tomcat中运行是存在问题的 就是容器启动了但是相应的服务却没办法使用

解决方法

  • 确认打包方式
<packaging>war</packaging>
  • 不使用内部的tomcat版本等信息进行打包忽略自身tomcat
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 采用外部的tomcat进行依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  • 启动类(ps: 这里得注意的是 .sources .run 都是自己的启动类名称)
@SpringBootApplication
@MapperScan("com.smile.ssm.dao")
@EnableScheduling
@EnableAsync
public class HisApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(HisApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(HisApplication.class, args);
        System.out.println("******************SSM project start success !!!***********************");
    }
}
  • mvn重新打包测试

  • 如果以上还不行的话依赖pom 中在加一个指定的 tomcat 版本信息

<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.5.70</version>
</dependency>

end

好好学习,好好进步!!!