【工具篇】SpringBoot基于assembly的服务化打包方案

news2024/11/29 12:29:31

简介

最近项目中,使用插件式开发方式,将多个Web应用打成一个FatJar程序包部署运行。但考虑到原始裸Jar包方式交付,有很多不便之处,比如启动命令过长(JVM参数配置、Spring环境配置等)、配置无法修改等问题会造成很大的运维负担。

针对上述问题,我们要去做服务化和工程化,主要有两点考虑:

  • 让SpringBoot能够加载jar外的配置文件
  • 提供一系列服务化的运维脚本

通过assemblySpring Boot项目进行服务化打包,便能解决上面提到的两个问题。

服务化打包过程

Nacos效果图

这里先来看下Nacos项目使用assemblySpringBoot服务化打包后的效果图。

`-- nacos
    |-- LICENSE
    |-- NOTICE
    |-- bin
    |   |-- shutdown.cmd
    |   |-- shutdown.sh
    |   |-- startup.cmd
    |   `-- startup.sh
    |-- conf
    |   |-- 1.4.0-ipv6_support-update.sql
    |   |-- announcement.conf
    |   |-- application.properties
    |   |-- application.properties.example
    |   |-- cluster.conf.example
    |   |-- derby-schema.sql
    |   |-- mysql-schema.sql
    |   `-- nacos-logback.xml
    `-- target
        `-- nacos-server.jar

打包过程

引入assembly插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <!-- zip包文件名不加上assembly.xml中配置的id属性值 -->
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
        	<!--具体的配置文件-->
            <descriptor>release-nacos.xml</descriptor>
        </descriptors>
        <tarLongFileMode>posix</tarLongFileMode>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <!--绑定到maven操作类型上-->
            <phase>install</phase>
            <!--运行一次-->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

一般情况下,assembly的配置文件项目根目录下,和pom文件平级,在项目中的大致结构图如下:
在这里插入图片描述

assembly.xml配置

assembly的配置内容,可参照下面配置,基本包括打包服务脚本、FatJar、配置文件等。从下面的代码中可以发现,项目配置文件打到了conf目录下,这样就实现了配置文件外置的目标。

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <id>server-${project.version}</id>
    <!--是否包装一层-->
    <includeBaseDirectory>true</includeBaseDirectory>
    <!-- 打包的类型,如果有N个,将会打N个类型的包 -->
    <formats>
        <format>dir</format>
        <format>tar.gz</format>
        <format>zip</format>
    </formats>
    <!--文件设置-->
    <fileSets>
        <fileSet>
            <includes>
                <include>plugins/**</include>
            </includes>
        </fileSet>

        <fileSet>
            <includes>
                <include>conf/**</include>
            </includes>
        </fileSet>
		<!--
            0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
            0644->即用户具有读写权限,组用户和其它用户具有只读权限;
        -->
        <fileSet>
            <includes>
                <include>bin/*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>LICENSE-BIN</source>
            <destName>LICENSE</destName>
        </file>
        <file>
            <source>NOTICE-BIN</source>
            <destName>NOTICE</destName>
        </file>
        <file>
            <!--打好的jar包名称和放置目录-->
            <source>../console/target/nacos-server.jar</source>
            <outputDirectory>target/</outputDirectory>
        </file>
    </files>

    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
            <includes>
                <include>com.alibaba.nacos:nacos-console</include>
            </includes>
        </moduleSet>
    </moduleSets>
</assembly>

项目展开示意图如下:
在这里插入图片描述
对于不同的Springboot项目,运维脚本可参考Nacos的进行定制修改,为了节约篇幅这里就不再赘述。

打包后日志&配置加载

有兴趣的同学,可以仔细看一下Nacos的startup.sh脚本,是如何将外置配置文件生效的,其实就是通过Program Arguments的方式传入的:

JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${BASE_DIR}/conf"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"

maven-assembly详解

参见:maven–插件篇(assembly插件)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于OpenMV的自动驾驶智能小车模拟系统

一、项目简介 基于机器视觉模块OpenMV采集车道、红绿灯、交通标志等模拟路况信息&#xff0c;实现一辆能车道保持、红绿灯识别、交通标志识别、安全避障以及远程WiFi控制的多功能无人驾驶小车。 赛道规格&#xff1a; 1、编程所需软件&#xff1a; OpenMV&#xff1a;使用Op…

cuda pyinstall cvs 使用记录

1.pip 换源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/2.安装匹配cuda的pytorch 官网&#xff1a;PyTorch pip3 install torch torchvision torchaudio查看能否使用cuda: import torch torch.cuda.is_available()获得以下反馈&#xff1a; 意思…

CSS基础学习--22 图像透明/不透明

一、透明度属性 CSS3中属性的透明度是 opacity 正常的图像 相同的图像带有透明度&#xff1a; img {opacity:0.4;filter:alpha(opacity40); /* IE8 及其更早版本 */ } 备注&#xff1a;Opacity属性值从0.0 - 1.0。值越小&#xff0c;使得元素更加透明。 IE8和早期版本使用滤…

【MySQL】库和表结构的增删查改

目录 一、库的操作 1、创建数据库 2、数据库所使用的编码 2.1查询编码集和校验集 2.2查看数据库的字符集和校验集 2.3创建数据库指定字符集和校验集 2.4不同的校验集所筛选的数据结果不一样 3、查看数据库 4、修改数据库 5、删除数据库 6、数据库的备份和恢复 6.1备…

【Spring MVC】获取 @RequsetBody 标识的对象,使用适配器模式增加代码可读性

1. 前言 一个技术需求引发的思考和实践&#xff1a; 思考 用 AOP 把校验代码 实践 用 Spring MVC 的 RequestBodyAdvice 做AOP逻辑继承 RequestBodyAdviceAdapter 实现自己的 适配器用自己的适配器让代码可读性增加熟悉 Spring MVC 、Java 反射的一些实践 本文内容 澄清一个A…

Mysql 调优

前言 硬件层面&#xff1a;使用固态硬盘、扩大内存、加大带宽等等 架构层面&#xff1a;主从复制实现读写分离【一主一 或 双主双从】 表结构层面&#xff1a;对表结构进行垂直拆分、水平分表、分库分表。常用的数据库中间件有&#xff1a;MySQL Proxy、MyCat以及ShardingSphe…

电脑C盘的清理 | 微信QQ缓存信息

记录一下我处理C盘爆满时的几个方法&#xff0c;基本上都是可以日常使用的。 一、磁盘清理 链接 二、查看具体哪些文件占内存 win图标右击 -----> 点击“系统&#xff08;Y&#xff09;” 点击查看具体是哪些文件夹哪些app占用了大量的内存&#xff0c;并选择删除部分…

第二章 re模块

1. re模块介绍 正则表达式 在处理字符串时&#xff0c;经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。 re 模块 Python 提供了 re 模块用于实现正则表达式的操作。在实现时&…

CTFshow-pwn入门-前置基础pwn23-pwn25

pwn23-25的题目会涉及到ret2shellcode、ret2libc等内容&#xff0c;本篇文章只会侧重研究这几道题目的wp&#xff0c;不会过多涉及到ret2shellcode、ret2libc的基本原理&#xff0c;等有时间再来写关于ret2libc、ret2shellcode…的相关内容。大家可以参考CTFwiki的文章去慢慢学…

FPGA_数码管显示UART串口接收的数据

实验目标&#xff1a;通过电脑调试助手向FPGA的UART串口接收模块发送数据&#xff0c;然后数据可以稳定显示在数码管上。 实验目的: 练习UART串口模块和数码管的使用。之前已经有文章详细讲解了串口和数码管的开发&#xff0c;故这里直接提供设计思路供大家参考。 &#xff08…

求解矩阵行列式因子、不变因子、初等因子、Jordan标准形

首先&#xff0c;我们先来简要了解一下行列式因子、不变因子和初等因子的概念。 下面举例说明。 例1 首先&#xff0c;我们要求 λ I − A λI-A λI−A 然后&#xff0c;我们先求行列式因子。 D 2 ( λ ) D_2(λ) D2​(λ)的求法如下&#xff1a; 然后&#xff0c;我们再求…

015、数据库管理之用户和权限

用户和权限 认证与赋权连接过程本地连接远程连接查看用户信息创建用户账号创建角色管理用户账户管理角色设置账号密码忘记root密码实验1-用户和角色实验2-授权注意事项 认证与赋权 认证&#xff1a;对用户进行验证 是权限控制的第一步当用户第一次连接数据库时必须进行认证如果…

【Git】TortoiseGit(小乌龟)配置SSH和使用

目录 1、TortoiseGit&#xff08;小乌龟&#xff09;配置SSH 1.1、右击打开Git命令窗口 1.2、设置Git的全局name和email 1.3、查看是全局名字和邮箱是否设置成功 1.4、生成 sshkey秘钥 2、TortoiseGit&#xff08;小乌龟&#xff09;的使用 2.1、创建本地仓库 2.2、添加…

企业会计软件必备!深入了解为何选择会计软件以及其带来的好处

随着科技的发展&#xff0c;企业需要更加智能化和数字化的财务管理方式&#xff0c;因此会计软件是现代社会的必然产物&#xff0c;会计软件可以帮助企业更有效地进行财务管理。 企业为什么需要会计软件&#xff1f; 提高准确度 通过传统的手工操作财务记录&#xff0c;会有很…

Qt6.2教程——2.介绍 Qt 中的 QWidgets、QMainWindow 和 QDialog

详细介绍 Qt 中的 QWidgets、QMainWindow 和 QDialog Qt 是一个广受欢迎的跨平台 C GUI 库。在 Qt 中&#xff0c;创建图形用户界面的基本单元是 Widget。本文将详细介绍三个重要的 Widget 类&#xff1a;QWidget, QMainWindow 和 QDialog&#xff0c;并比较它们的特点和用途。…

设计模式之原型模式笔记

设计模式之原型模式笔记 说明Prototype(原型)目录UML原型模式示例类图RealizeType类(浅克隆)测试类 原型模式案例奖状类测试类 扩展(深克隆)学生类奖状类测试类 说明 记录下学习设计模式-原型模式的写法。 Prototype(原型) 意图:用原型实例指定创建对象的种类&#xff0c;并…

Spring之IOC容器从入门都手写源码

文章目录 一、IOC容器1、控制反转&#xff08;ioc&#xff09;2、依赖注入3、IoC容器在Spring的实现 二、基于XML管理Bean1、获取bean方式一、根据id获取方式二、根据类型获取方式三、根据id和类型获取bean 2、依赖注入之setter注入3、依赖注入之构造器注入4、特殊值处理5、为对…

基于llama模型进行增量预训练

目录 1、llama模型转换(pytorch格式转换为HuggingFace格式) 1.1、拉取Chinese-LLaMA-Alpaca项目 1.2、准备文件夹 1.3、下载llama官方原始模型 1.4、移动文件到指定位置 1.5、执行转换脚本 2、合并模型 2.1、下载Chinese-LLaMA-Plus-7B模型 2.2、下载chinese_alpaca_p…

【Leetcode60天带刷】day16二叉树—— 104.二叉树的最大深度 , 111.二叉树的最小深度,222.完全二叉树的节点个数

题目&#xff1a; 104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c; 3/ \9 20/ …

数字电路基础---寄存器

目录 数字电路基础---寄存器 1、寄存器简介 1.1、寄存器是如何工作的 2、实验任务 3、程序设计 3.1、模块设计 3.2、绘制波形图 4、编写代码 5、仿真验证 5.1、编写 TB 文件 5.2、仿真验证 6、总结 7、拓展训练 数字电路基础---寄存器 寄存器是构成时序逻辑最重要…