您的位置:首页 > 编程语言 > Java开发

【小QのSpringBoot】打包可部署的War包

2016-09-08 10:26 645 查看
背景

工程结构

配置POM文件

创建Spring Boot启动类

创建Spring Boot的Servlet初始化器

创建测试用Controller

特别提示

代码下载地址

开发环境

背景

Spring Boot可以很方便地通过可运行Jar包的形式,在Spring Boot内嵌容器中运行Web应用,但在生产部署过程中,往往需要将Web应用部署在外部的容器中。为此,需要将Spring Boot的Web应用打包为War包进行部署。

本文根据Spring Boot官方指导文档,实现为Tomcat打包War包,并在外部Tomcat中成功运行。

工程结构



配置POM文件

在Web应用基础上增加如下配置

<!-- 声明Maven打包为War包 -->
<packaging>war</packaging>

<dependencies>
<!-- 引入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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- 部署用需做此配置 -->
<!-- 这样在打包时会剔除容器中已经包含的包,避免包冲突 -->
<scope>provided</scope>
</dependency>
</dependencies>


创建Spring Boot启动类

Spring Boot启动类保持不变

package com.q.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ClassName: MySpringBootApplication
* @Description: SpringBoot主入口
* @author: ZQ
* @date: 2016年9月5日 下午1:48:00
*/
//@PropertySource(value = { "WEB-INF/custom.properties" })
@SpringBootApplication
//SpringBoot入口,与以下组合等效
//@Configuration -- 注明为配置类
//@EnableAutoConfiguration -- 开启自动配置
//@ComponentScan -- 以当前包路径为根,开启组件扫描
public class MySpringBootApplication
{

/**
* @Title: main
* @Description: SpringBoot默认的Jar启动模式,直接Run即可运行,默认监听8080端口
* @param args
* @throws Exception
* @return: void
* @author:ZQ
* @date:2016年8月25日 下午1:58:25
*/
public static void main(String[] args) throws Exception
{
SpringApplication.run(MySpringBootApplication.class, args);
}
}


创建Spring Boot的Servlet初始化器

package com.q.springboot.common;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

import com.q.springboot.MySpringBootApplication;

/**
* @ClassName: ServletInitializer
* @Description: 打包为可部署War包时,Servlet3.0容器使用该类作为初始化器,是整个Web应用的主入口
* @author: ZQ
* @date: 2016年9月2日 下午5:34:25
*/
public class ServletInitializer extends SpringBootServletInitializer
{

@Override
protected SpringApplicationBuilder configure
(SpringApplicationBuilder builder)
{
// 指向SpringBoot的主入口
return builder.sources(MySpringBootApplication.class);
}
}


创建测试用Controller

package com.q.springboot.web;

import org.springframework.web.bind.annotation.GetMapping;
<
4000
span class="hljs-keyword">import org.springframework.web.bind.annotation.RestController;

/**
* @ClassName: SampleController
* @Description: 定义一个测试用的Rest接口
* @author: ZQ
* @date: 2016年9月7日 下午5:28:50
*/
@RestController
public class SampleController {

@GetMapping("/hello")
public String hello() {
return "Hello World!";
}

}


特别提示

上述方法打包的War包只能在Servlet 3.0及以上容器中运行,Servlet 3.0之后可以使用注释定义Servlet和Filter,无需在web部署描述符(web.xml)中建立Servlet/Filter配置。

tomcat7.0以上版本支持Servlet 3.0。

Spring Boot也可以添加web.xml配置文件以便在Servlet 3.0之前的容器中运行,官方指导文档中没有给出web.xml具体的配置方法,此处待后续实现后补充。

Servlet 3.0之前版本War包的一般结构如下

└── META-INFO
└── WEB-INFO
└── lib   #一些依赖的jar包
└── classes #classpath目录
└── web.xml
└── 其它配置文件、属性文件等
└── 其它资源文件


代码下载地址

http://download.csdn.net/detail/jianghai0297/9625007

开发环境

本文示例代码在以下版本的64位环境中测试通过

JDK 1.8.0_11

Maven 3.2.1

Eclipse 4.4.2

Tomcat 7.0.42
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springboot war 小Q