SpringBoot实现增量部署

1、使用背景

最近发现公司发布版本时候,很齐全,接口文档,部署方式等都很好,其中有个增量部署包,有点兴趣,不清楚怎么生成增量包和部署增量包的,特此记录一下。

2、实现流程

  • 可以打一个全量的jar包,然后解压,在BOOT-INF文件中找到lib文件夹,拷贝出来。
    在这里插入图片描述
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!--指定的依赖路径-->
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

在这里插入图片描述
把lib文件复制出来即可。

  • 打增量包流程
    在lib同目录下创建resource文件夹,进入代码resource文件夹内复制static文件夹及config文件到resource文件下。如图:
    在这里插入图片描述
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 模块打包需要增加这个配置,带exec的为可执行jar,不带的为可引用jar-->
                    <classifier>exec</classifier>
                    <includeSystemScope>true</includeSystemScope>
                    <!-- 指定该jar包启动时的主类[建议] -->
                    <mainClass>com.zhangls.frame.FrameApplication</mainClass>
                    <!--必须为ZIP模式,不指定的话-Dloader.path不生效-->
                    <layout>ZIP</layout>
                   <!-- 打包的时候排除的jar包-->
                    <includes>
                        <include>
                            <groupId>non-exists</groupId>
                            <artifactId>non-exists</artifactId>
                        </include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

打包结果:

在这里插入图片描述

其中可执行包打包的就是除了lib文件夹外其他所有文件的打成的通用包。

  • 把可执行jar包复制到 lib、resource同级文件夹
    在这里插入图片描述

也可以打成zip包,上传到项目中解压后执行启动命令。

3、部署增量包到项目中并启动

上传zip到项目目录中后,执行如下命令启动:

执行:java -Dloader.path=./lib,./resource -jar .\frame-0.0.1-SNAPSHOT-exec.jar

这个命令的意思就是使用上面新的lib文件夹的包以及resource的配置文件,在执行后面的通用jar包,所以每次有跟新的文件,直接替换文件夹下的文件即可,加载的是该目录下的文件和静态资源等。

4、说明

进行增量打包后,如果前端有不涉及到后端的修改时都可以对resource中的文件进行替换,且不用重启服务。后端如果有更改,只用更新有变化的jar包即可。如果在项目修改过程中引用了新的jar包,需要把新引用的jar包上传至lib文件夹。

采用jar命令的方式来更新增量文件的方式:
jar命令更新增量文件

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用Spring Boot实现数据库增量备份的示例代码: ```java @Component public class DatabaseBackupTask { @Value("${database.backup.path}") private String backupPath; @Autowired private DataSource dataSource; @Autowired private JdbcTemplate jdbcTemplate; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); @Scheduled(cron = "${database.backup.cron}") public void backupDatabase() { try { File backupFolder = new File(backupPath); if (!backupFolder.exists() || !backupFolder.isDirectory()) { backupFolder.mkdirs(); } String backupFileName = "backup-" + DATE_FORMAT.format(new Date()) + ".sql"; File backupFile = new File(backupFolder, backupFileName); ProcessBuilder processBuilder = new ProcessBuilder( "mysqldump", "--skip-comments", "--skip-triggers", "-u" + getUserName(), "-p" + getPassword(), "--databases", getDatabaseName(), "--result-file=" + backupFile.getAbsolutePath()); processBuilder.environment().put("MYSQL_PWD", getPassword()); Process process = processBuilder.start(); int exitCode = process.waitFor(); if (exitCode != 0) { throw new RuntimeException("Failed to backup database"); } jdbcTemplate.update("INSERT INTO backup_history (file_name, backup_time) VALUES (?, ?)", backupFileName, new Date()); } catch (Exception e) { e.printStackTrace(); } } private String getUserName() { return dataSource.getUsername(); } private String getPassword() { return dataSource.getPassword(); } private String getDatabaseName() { return dataSource.getConnection().getCatalog(); } } ``` 在上面的代码中,我们使用了Spring Boot的定时任务注解`@Scheduled`来定期执行备份任务。我们使用`mysqldump`命令来生成SQL备份文件,并将其保存在指定的备份目录中。备份文件名是基于当前时间生成的,以避免覆盖之前的备份文件。我们还使用JdbcTemplate将备份历史记录保存在数据库中。请注意,这里我们使用了MySQL,如果您使用其他数据库,需要相应地更改备份命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值