Springboot 进行war包部署,以及踩坑历险!!!

使用springboot也很长时间了,一直都是使用内置Tomcat运行项目,最近由于公司架构需要将项目以war包形式发布封装组件,又不想把自己多天的成功重新用spring造一遍,遂有了将springboot打成war包的想法。参考网上各种方法,自己也在坑里挣扎了许久。脱坑后总结一下,供大家参考,也给自己提醒。
首先需要一个能成功运行的springboot项目,这里不在重新搭建,直接用已知项目作为更改。

启动文件修改

springboot默认是使用内部Tomcat启动,如果使用外部Tomcat的话同样存在一个入口的问题,这里我们只需要将启动类继承SpringBootServletInitialize告诉外部Tomcat在这个类下启动(注解并不需要这么多,这里只是为了学习和记录,大家可以参考参考)。

@EnableTransactionManagement // springboot 开启事务的注解
@EnableCaching // 使能缓存
@EnableAsync   //为了使@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync
@SpringBootApplication
public class RestdemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(RestdemoApplication.class);
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(RestdemoApplication.class, args);
    }
}

pom文件的修改

首先我们需要将springboot打包方式更改为war

<packaging>war</packaging>

springboot 内置了Tomcat,为了防止Java包冲突我们需要排除springboot默认Tomcat依赖,然而Tomcat启动有需要一些sevlet或者el等类去编译,因此还需要依赖spring-boot-starter-tomcat,当然这里的作用域需要设置为provided

        <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>
            
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

接着是添加maven插件


    <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.4.2.RELEASE</version>
            <configuration>
                <fork>true</fork>
                                  <!--  这里是启动类App的位置 -->
                <mainClass>com.example.restdemo.RestdemoApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <!-- 没有web.xml 配置的话, 配置为false-->
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>

    </build>

pom文件修改就到这里。

IDEA 配置Tomcat启动

此处省略Tomcat启动....或者直接使用maven命令打包(跳过测试过程)
maven clean package  -Dmaven.test.skip=true 

不知道你们是否正常启动,如果有问题继续看看我踩的坑

踩坑记录

1.启动后无法正常访问
在cmd里面查看我springboot配置的端口8084,使用netstat -ano|findstr "8084",没有找到相关进程。
同样查看Tomcat配置的端口8087,使用
netstat -ano|findstr "8084",看到端口以及被监听,根据进程号可以查看和kill端口。
注意:在application.properties里面配置的端口是springboot内部端口,同外部Tomcat启动的话端口并不是 application.properties的配置端口,而是外部Tomcat所配置的端口。
2.端口问题解决后还是没法访问,于是若若的看了一下Tomcat日志,报错了。。。堆栈日志我就不贴了,告诉大家出现这样的报错
Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager 。什么?我不是已经加入spring-boot-starter-tomcat 相关依赖了吗?这个问题我苦苦在坑里待好几天,终于在网上找到了答案。原因是我的tomcat7提供的el-api 和项目里面的el-api.jar冲突,解决办法也很简单,就是将你IDE(IDEA 或eclipse)安装目录下的el-api.jar 替换Tomcat的lib目录下的el-api.jar 或者使用Tomcat8 即可解决问题。
暂时就这么多,终于可以helloword了,如果大家还有什么坑可以贴出来一起交流交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 航哥你终于开学了,我绵软的躺在沙发上自言自语,航哥突然说,你是不是不喜欢我了?我的天,老妈怎么会不喜欢你呢^_^ ...
    兔子微阅读 246评论 0 0
  • 1、香槟色玫瑰 2、橙色康乃馨 3、香槟色桔梗 准备花泥:将整块花泥去除1/3后泡好,用朔料纸将底部包裹并用胶带纸...
    杜芮宁阅读 309评论 0 0
  • ​老板准备做一个慈善活动,把一些家庭贫困的小孩子请到五星级酒店里,安排他们体验五星级的美食,五星级的服务,五星级的...
    Miss_Mia阅读 175评论 0 0
  • 现在大学二年级了,我还是对自己的未来一片迷茫。周围的人有的开始了研究课题,有的开始了考研努力,可是唯有我还在浑浑噩...
    Darkloveness阅读 257评论 0 0
  • 不知道为什么这么好的一本书起了一个看上去像家常剧一样的名字,但看了内容真的感觉受益匪浅,作者在两个不同价值观以及思...
    取个帅气的匿名吧阅读 249评论 0 1