如何发布Sping Boot项目?
新建好SpringBoot项目之后,SIT测试如果没问题,则下一步肯定要进行UAT测试。
那么如何将SpringBoot项目进行发布部署,这和我们之前的普通web项目不太一样,之前的项目直接部署到tomcat的webapps中,然后启动tomcat即可访问。
但是SpringBoot项目内嵌tomcat,这如何发布部署访问呢?
目前比较常用的方式有三种:发布JAR包、发布WAR包、部署到自动化容器中,以下具体讲解发布部署过程。
1
技术选型
JDK1.7、MYSQL57、Spring Boot、Logback、Mybatis、mybatis映射xml、jsp、关闭默认模板引擎、DB连接池、Docker
2
开发工具
Myeclipse、Maven、Linux、Tomcat7
方式一:JAR包--推荐
点击这里《框架 | SpringBoot项目创建和发布部署步骤》
方式二:WAR包--看着办
点击这里《框架 | SpringBoot项目发布部署外部tomcat服务器步骤》
方式三:自动化容器--强烈推荐
Docker概述:
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。更重要的是容器性能开销极低。Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序。
Docker应用场景:
SpringBoot项目部署Docker过程:
Docker安装(Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上),采用yum安装方式:
①:通过 uname -r 命令查看你当前的内核版本
②:执行docker安装命令
③:启动docker后台服务
④:测试运行hello word
创建SB项目:
①:修改pom.xml,增加docker的插件
将SB项目部署到docker中:
①:首先保证在本地是可以访问没问题
②:创建一个source folder--src/main/docker
③:创建文件Dockerfile
④:导出jar包
⑤:在centos的/opt下新建docker文件夹
⑥:将jar包和Dockerfile 文件上传到docker文件夹目录下
⑦:在docker文件夹下执行命令:docker build -t docker .
-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile所在的目录。
⑧:查看docker镜像进程docker images
⑨:启动镜像
⑩:本地浏览器访问
核心配置和操作过程如下:
核心代码:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xdl</groupId>
<artifactId>SpringBootDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
MainServerController.java
@Controller
@SpringBootApplication
public class MainServerController {
@ResponseBody
@RequestMapping(value = "/")
String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(MainServerController.class, "--server.port=8081");
}
}
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD SpringBootDemo-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
部署过程详解:
Docker安装,采用yum安装方式:
①:通过 uname -r 命令查看你当前的内核版本
②:执行docker安装命令
③:启动docker后台服务
④:测试运行hello word
创建SB项目:
①:修改pom.xml,增加docker的插件
略
将SB项目部署到docker中:
①:首先保证在本地是可以访问没问题
②:创建一个source folder--src/main/docker
③:创建文件Dockerfile
④:导出jar包
项目-->右键-->maven install
⑤:在centos的/opt下新建docker文件夹
⑥:将jar包和Dockerfile 文件上传到docker文件夹目录下
⑦:在docker文件夹下执行命令:docker build -t docker . (注意有个点)
-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile所在的目录。
执行过程中,报错如下:
原因:出现这个问题原因为国内网络问题,无法连接到 docker hub。 好在国内已经有 daocloud,docker指定该源即可
解决:执行命令docker pull registry
解决完毕之后,继续执行docker build -t docker . 命令(注意有个点)
⑧:查看docker镜像进程:docker images
⑨:启动镜像 docker run -d -p 8081:8081 docker
⑩:本地浏览器访问
访问之前需要开启端口访问:
/sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT