前言:可以打包成JAR包独立运行,也可以打包成WAR包部署到Tomcat容器中,若涉及到大规模部署,Jenkins成为最佳选择之一。本文主要介绍Maven项目的打包、发布和部署。
Maven默认会打包jar包,也可以在pom.xml中指定打包方法:
<groupId>com.examplegroupId>
<artifactId>buildBaseFrameartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>baseBuildFramename>
<description>basic springboot framedescription>
<packaging>jarpackaging>
主要是最后一行。
然后在项目根目录下的控制台执行:
mvn clean package -Dmaven.test.skip=true
相对于jar包,war包需要安装Tomcat。
(1)pom.xml配置
<groupId>com.examplegroupId>
<artifactId>buildBaseFrameartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>baseBuildFramename>
<description>basic springboot framedescription>
<packaging>warpackaging>
(2)排除内置Tomcat
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
scope属性设置为provided,这样在打包产生的war包就不会包含Tomcat相关的jar。
(3)注册启动类
改写启动类。
@SpringBootApplication
public class BuildBaseFrameApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(PackageApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(BuildBaseFrameApplication.class, args);
}
}
(4)生成war包
和生成jar包一样
mvn clean package -Dmaven.test.skip=true
将打包好的war包复制到Tomcat服务器中的webapps目录下启动就行。
为了方便修改配置文件、静态资源,可以把他们分开打包。只需要修改pom.xml就可以实现。
(1) 前台运行
java -jar package-1.0.0.jar
(2) 后台运行
nohup java -jar package-1.0.0.jar &
日志会被重定向到nohup.out文件中,也可以更改重定向文件:
nohup java -jar package-1.0.0.jar >spring.log 2>&1&
重定向到spring.log
2.1是简单的部署运行,建议使用服务的方法来部署。
(1)jar包复制到/usr/local/目录下
(2)创建服务文件
先进入目录:
cd /etc/systemd/system/
使用vim springbootpackage.service创建服务文件:
[Unit]
Description=springbootpackage
After=syslog.target
[Service]
ExecStart=/usr/java/jdk1.8.0_221-amd64/bin/java -Xmx4096m -Xms4096m -Xmn1536m -jar /usr/local/spring-boot-package-1.0.0.jar
[Install]
WantedBy=multi-user.target
主要是定义服务名字,启动的命令和参数,使用时只需要修改Description和ExecStart。
(3)启动服务
手动操作服务:
// 启动服务
systemctl start springbootpackage
// 停止服务
systemctl stop springbootpackage
// 查看服务状态
systemctl status springbootpackage
// 查看服务日志
journalctl -u springbootpackage
还可以设置服务在系统开机时自动启动:
systemctl enable springbootpackage
组成部分:
总结:镜像相当于打包好的程序,启动后运行在容器中,仓库是保存存储镜像的服务地址。
添加构建Docker的插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.0.0version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}imageName
>
<dockerDirectory>src/main/dockerdockerDirectory>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
plugins>
build>
参数说明:
(1)创建Docker文件
在src/main/docker下创建Dockerfile文件:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-boot-docker-1.0.jar spring-boot-docker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar", "/spring-boot-docker.jar"]
(2)生成镜像
把项目spring-boot-starter-docker复制到服务器中(示例为centos),进入项目根目录,使用命令:
mvn package docker:build
运行结果:
(3)使用docker images查看构建好的镜像
(4)运行镜像
创建并启动应用:
docker run -p 8080:8080 -t springboot/spring-boot-docker
查看正在运行的镜像:
docker ps