war包部署

1.下载安装Tomcat

下载地址:https://tomcat.apache.org/download-90.cgi

如下图所示:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署

2.入口类继承SpringBootServletInitializer重写configure方法

如果要进行生产环境部署,需要单独配置一下Spring Boot 的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到Spring Boot 入口类的main方法启动程序加载,使用需要继承,代码如下:

package com.luzhanshi.springBootFrame;

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

@SpringBootApplication
public class SpringBootFrameApplication extends SpringBootServletInitializer {
    /**
     * Spring Boot 默认main方法
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(SpringBootFrameApplication.class, args);
    }

    /**
     * 重写configure方法,加载启动类
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringBootFrameApplication.class);
    }
}

部分不熟悉IDEA的同学可能不知道怎么重新父类的方法,参照下图即可:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_02

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_03

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_04

3.排除内置tomcat

需要配置一下pom.xml,排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下:

<!--排除内置tomcat jar包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

主要的代码是provided,设置打包不会包含进去,由其他设施提供。

4.IDEA生成war文件

idea打war包步骤可参考鄙人文章

如果打包为jar包的时候,不会包含JSP文件,所以访问的时候回404,而打包为war的时候回包含JSP文件,所以需要把打包格式修改为war.

5.配置Tomcat运行项目

步骤一:把war文件复制到tomcat的webapps目录下

步骤二:配置conf/server.xml

在Host标签内添加Context设置,docBase属性填写war文件名称,配置如下:

 八、SpringBoot生产环境部署_SpringBoot生产环境部署_05

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">    
    <Context path="" docBase="此处填写war包名" debug="0" privileged="true" reloadable="true" />
    <!--
    其他代码
    -->
</Host>

步骤三:启动tomcat

运行bin/shutdown.bat文件,启动tomcat

八、SpringBoot生产环境部署_SpringBoot生产环境部署_06

到此项目部署成功,虽然本人部署到Windows服务器了,Linux也是一样的步骤。

如果我们不想加8080端口访问,那么我们可以将tomcat默认的8080端口修改为80,这样因为浏览器在我们没有输入端口时,默认的端口时80,那么我们就不用输入端口了:

打开tomcat文件夹-->找到conf-->server.xml-->用记事本打开:

 八、SpringBoot生产环境部署_SpringBoot生产环境部署_07

此时我们不用输入端口也可以访问项目了

jar包部署

ecliplse获得jar:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_08

 IDEA获得jar:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_09

 上面生成的jar包都会出现在target目录下面

八、SpringBoot生产环境部署_SpringBoot生产环境部署_10

把上面的jar包复制到一个新建的文件夹:

将项目里面的下面这个文件也拷贝到该文件夹:

 八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_11

最后在该文件夹新建一个startup.bat文件,并编辑如下内容:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_12

项目发布时最终文件如下:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_13

application.properties是工程的配置文件,配置数据库库接参数、日志文件、日志等级、服务使用的端口等配置信息,把工程中文件拷贝出来即可

startup.bat启动服务的批处理,也可包含配置信息,参考如下图,

八、SpringBoot生产环境部署_SpringBoot生产环境部署_14

最后以管理员身份运行bat文件,项目就启动了

八、SpringBoot生产环境部署_SpringBoot生产环境部署_15

访问地址和本地访问地址一样:

八、SpringBoot生产环境部署_SpringBoot生产环境war包部署_16

jar和war的区别?

  • jar(java application archive)java应用程序库,通常为开发引用的通用类
  • war(web application archive)web应用程序

所以从jar和war的区别来看,网页程序打包成war格式也是很合适的。

四、知识扩展:Spring Boot 模板推荐

虽然上文我们详细介绍了JSP在Spring Boot 中使用,但是Spring Boot官方并不推荐使用JSP(原因见下文)。

Spring Boot推荐模板引擎:

  • Thymeleaf
  • Freemarker
  • Mustache
  • Groovy Templates

Spring为什么不推荐使用JSP?

Spring官方不推荐使用JSP的原因有这么几个:

  1. 官方文档JSP没有Thymeleaf好;
  2. Thymeleaf健康的开源项目,几乎每个月都有更新,而JSP已经好几年没有实质性的进展;
  3. Thymeleaf有迅速响应的用户论坛。

更多详情,点击查看:https://spring.io/blog/2012/10/30/spring-mvc-from-jsp-and-tiles-to-thymeleaf

总结:按照官方的说法,如果你有数百个JSP页面,我们并不建议您应该立即抛弃它们,重新使用Thymeleaf,但是,如果您开始开发一个新项目,强烈鼓励您比较其他模板引擎和JSP,以确认哪一个更适合您。