美文网首页
[JWeb系列6] SpringBoot打包War包

[JWeb系列6] SpringBoot打包War包

作者: 做梦枯岛醒 | 来源:发表于2018-01-19 15:48 被阅读94次

    写完了代码我们得考虑把他放在服务器上运行了,记得以前写Php的时候,把整个项目搬到服务器的Apache目录下就可以使用了,作为脚本语言,用起来也是很轻巧的,但是现在不一样了,在JavaWeb工程中这个操作 是不一样的,主要分为打包Jar包运行和打包War包运行两种操作方式。那么两者的都是什么呢?

    jar:即Java Archive,Java的包,Java编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jar,jar中除了class文件还可以包括一些资源和配置文件,通常一个jar包就是一个java程序或者一个java库。

    war:Web application Archive,与jar基本相同,但它通常表示这是一个Java的Web应用程序的包,tomcat这种Servlet容器会认出war包并自动部署。

    一个通过Java运行,一个通过tomcat运行。
    那么这里我们讨论一下War的打包方式。

    1.设置打包方式

    在pom.xml中修改打包方式(默认是jar,找不到的话Ctrl+f搜一下<packaging>)
    修改后如下

    <packaging>war</packaging>
    

    2.移除内嵌tomcat插件(你暂时可以先忽略这一步,在需要的情况下,再试试本步骤)

    修改spring-boot-starter-web依赖内容(如代码或者图片)

    <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>
    

    3.添加servlet-api的依赖

    同样在dependencies标签内添加javax.servlet-api,内容如下

    <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
    

    4.修改启动类

    对于War来说,我们不能用run的方法来启动了,那么我们就得处理一下,首先我们看我们平时用的启动类,我的叫WordeditApplication

    package com.service.wordedit;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @EnableAutoConfiguration
    @MapperScan("com.service.wordedit.dao")
    public class WordeditApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(WordeditApplication.class, args);
        }
    
    }
    
    

    我们在本地测试的时候,只需要点击main旁边的运行按钮就可以跑了,
    那么在服务器没法点击,就需要有一个东西帮助,那我们新建这个东西,也是一个类,我们叫他SpingStartApplication

    package com.service.wordedit;
    
    
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    
        public class SpingStartApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            // 注意这里要指向原先用main方法执行的Application启动类
            return builder.sources(WordeditApplication.class);
        }
    }
    

    5.跳过测试

    由于本地开发的项目包含测试类,那么如果打包的时候不能执行测试类就会报错,有两种解决方案,一是跳过测试,二十执行测试。

    对于第一种,我们添加一句代码在properties标签下


    <maven.test.skip>true</maven.test.skip>
    

    对于第二种,需要添加相应的测试插件,具体可以通过报错信息观察需要的插件,不过大多数情况,使用第一种就没问题。

    6.mvn操作

    使用idea自带的mvn打包,两步操作,首先双击clean,跑完日志后,再双击package


    注意看运行日志



    都是[INFO]标签,并且有BUILD SUCCESS就说明成功了。

    去target下面找找看。


    7.运行

    首先Mysql,Tomcat这些就不用多说了,自己配置好就行,我们现在把war包发送上去,重新启动Tomcat。

    然后进行如下访问:

    IP地址+端口号/war名/接口名
    http://surine.cn:8080/WordEdit/login
    

    如果遇到404错误,可以现在本地看看报什么错误,然后对应怎么解决。
    比如说我遇到了一个问题,在本地的tomcat运行(不是SpingBoot内置的tomcat)发现mysql驱动找不到,小白一个,编写的时候用的Libraries已经导入了,而且在内置tomcat里运行很成功,可是在本机tomcat就无法运行,请求大神帮助解决,在pom.xml里加入了

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    

    mysql的依赖,就可以了。
    总之,做任何东西都有很多的坑,不要心急,慢慢解决总会解决的了的。

    效果

    8.注意的地方

    • mysql帐号密码在本地和服务器可能不一样,注意开发的时候和生产场景的配置
    • mysql的数据库,表,数据注意保持同步。
    • 使用本机tomcat而非SpringBoot tomcat运行程序


      选择Edit Configuration

      -本机tomcat的图标是小老虎,SpringBoot是小叶子,可以在浏览器看到这个图标判断是用哪个tomcat启动的。


      如图所示

    相关文章

      网友评论

          本文标题:[JWeb系列6] SpringBoot打包War包

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