美文网首页学习
Springboot 进行war包部署,以及踩坑历险!!!

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

作者: 清风徐来水波不清 | 来源:发表于2018-07-04 10:00 被阅读4次

    使用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了,如果大家还有什么坑可以贴出来一起交流交流。

    相关文章

      网友评论

        本文标题:Springboot 进行war包部署,以及踩坑历险!!!

        本文链接:https://www.haomeiwen.com/subject/gfgsuftx.html