当前位置 博文首页 > u011767319的博客:docker+jrebel+idea的springboot热部署
解放稍微更新代码就打包重启的烦恼,本人已经受够的小改动就要打包上传重启全部代码的方式
绝对是精华
本人的另外一篇文章有详细介绍,请移步,在这就不多做解释了
本地的另外一篇文章,idea个人插件安装-前往观看
这个是测试的demo
打包很关键,为了方便项目打包的线上
spring-boot-thin-layout打包成精简包也就几百k,上传后再现在下载依赖,减少上传文件的痛苦
docker-maven-plugin 这是docker打包工具
maven-antrun-plugin 这是maven打包工具 可以重新定义打包位置
其他的就不多做描述了
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ljq</groupId>
<artifactId>docker_pack_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>docker_pack_demo</name>
<description>docker打包测试</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-thin-layout</artifactId>
<version>1.0.26.RELEASE</version>
</dependency>
</dependencies>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!-- docker构建插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- 生成的docker镜像名称 -->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- 复制jar包到指定目录 -->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
FROM java:latest 到时候docker 会去下载openjdk 8
ENV 定义参数
jrebel.jar和libjrebel64.so 热部署必须的
这个是为了简单起见的,不想用这个的话可以去官网下载文件
这个两个文件需要从哪里找的
64位操作系统就选择64结尾的,32位操作系统就选择32结尾的;Linux选择.so后缀的,Mac选择.dylib结尾的,windows选择.dll结尾的
jrebel.jar和libjrebel64.so建议放到可以用http下载的地方
本人电脑用的是win11,不要在意细节哈
看下面例子
热启动必须的
-Xdebug","-Xrunjdwp:server=y,transport=dt_socket,address=${DBUG_SERVER_PORT},suspend=n","-agentpath:/libjrebel64.so"
# 指定基础镜像 这里springboot项目运行只需要java jdk环境即可
FROM java:latest
#端口号
ENV SERVER_PORT=8080
#Dbug
ENV DBUG_SERVER_PORT=8081
#指定使用utf-8编码运行
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# 维护者信息
MAINTAINER ljq
# 重命名
ADD *.jar app.jar
#添加jrebel的包
ADD http://192.168.1.50/file/jrebel.jar /jrebel.jar
ADD http://192.168.1.50/file/libjrebel64.so /libjrebel64.so
# 对外暴漏的端口号
EXPOSE $SERVER_PORT
# 运行
ENTRYPOINT ["java", "-jar","-Xdebug","-Xrunjdwp:server=y,transport=dt_socket,address=${DBUG_SERVER_PORT},suspend=n","-agentpath:/libjrebel64.so","-Drebel.remoting_plugin=true","-Djava.security.egd=file:/dev/./urandom", "app.jar","--server.port=${SERVER_PORT}"]
选好dockerfile 位置
指定好绑定窗口
打包是跳过测试过程,-Dmaven.test.skip=true
完整clean package install -Dmaven.test.skip=true
打包运行时,发现docker容器里的时区不对
需要在运行选项上指定好,项目运行的时区
-e TZ="Asia/Shanghai"
中国的时区
docker 容器默认是使用0时区的
添加完参数后,显示中国时区
idea 的docker 控制台输出
控制台输出-编码格式默认是GBK的
所有输出中文乱码了
需要将idea的指定一下编码格式
英文版的
IDEA工具栏 → HELP → Edit Custom VM Options…
中文版的
添加配置
-