当前位置: 首页 > news >正文

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析

前沿:本地化 AI 推理的新范式

随着大语言模型(LLM)应用的普及,本地化部署与灵活扩展成为企业级 AI 开发的核心需求。Docker Model Runner 作为 Docker 官方推出的 AI 推理引擎,支持集成多厂商模型并提供标准化 API,结合 Spring AI 的强大生态,可快速构建低成本、高可控的本地化聊天服务。本文将深入解析如何通过 Spring AI 与 Docker Model Runner 的无缝集成,实现开箱即用的 LLM 功能,涵盖环境配置、属性调优、函数调用等核心技术点。

一、环境准备:搭建 Docker Model Runner 基础架构

1. 前提条件

  • Docker Desktop 安装:下载并安装适用于 Mac 的 Docker Desktop 4.40.0(其他平台请对应选择)。
  • 启用 Model Runner
    选项 1(直接启用)
    docker desktop enable model-runner --tcp 12434
    
    基 URL 配置为 http://localhost:12434/engines
    选项 2(Testcontainers 容器化)
    通过 Socat 容器映射端口,适用于自动化测试:
    @Container
    private static final SocatContainer socat = new SocatContainer().withTarget(80, "model-runner.docker.internal");@Bean
    public OpenAiApi chatCompletionApi() {var baseUrl = "http://%s:%d/engines".formatted(socat.getHost(), socat.getMappedPort(80));return OpenAiApi.builder().baseUrl(baseUrl).apiKey("test").build();
    }
    

2. Spring AI 依赖配置

pom.xmlbuild.gradle 中引入最新 Starter:

<!-- Maven -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
// Gradle
implementation 'org.springframework.ai:spring-ai-starter-model-openai'

二、核心配置:从连接到模型调优

1. 基础连接配置

通过 application.properties 配置 Docker Model Runner 端点:

spring.ai.openai.api-key=test          # 任意有效字符串(非真实 OpenAI Key)
spring.ai.openai.base-url=http://localhost:12434/engines  # Model Runner 引擎端点
spring.ai.openai.chat.options.model=ai/gemma3:4B-F16      # 选择目标模型(需与 Model Runner 支持的镜像匹配)

2. 聊天属性深度解析

Spring AI 提供细粒度配置,支持重试策略、连接参数及模型行为调优,以下为核心属性表:

重试策略(前缀:spring.ai.retry
属性名称描述默认值
max-attempts最大重试次数10
backoff.initial-interval初始回退间隔(秒)2
backoff.multiplier回退间隔乘数(指数增长因子)5
backoff.max-interval最大回退间隔(秒)180
on-client-errors是否重试 4xx 错误false
模型行为配置(前缀:spring.ai.openai.chat.options
属性名称描述默认值
temperature输出随机性控制(0-1,越高越随机)0.8
max-tokens最大生成令牌数无限制(受模型上下文限制)
frequencyPenalty重复令牌惩罚(-2.0~2.0)0.0
responseFormat强制输出 JSON 格式
tools允许调用的工具列表
多模型管理

通过 spring.ai.model.chat 开关启用/禁用 OpenAI 聊天模型:

spring.ai.model.chat=openai  # 启用 OpenAI 聊天模型(默认)
# spring.ai.model.chat=none  # 禁用聊天模型

三、进阶功能:函数调用与流式响应

1. 智能工具集成(函数调用)

Docker Model Runner 支持模型自动触发注册函数,实现外部服务交互。
示例代码:

@SpringBootApplication
public class DockerModelRunnerDemo {@Bean@Description("获取指定地点天气")public Function<WeatherRequest, WeatherResponse> weatherFunction() {return request -> {double temp = "Amsterdam".equals(request.location()) ? 20 : 25;return new WeatherResponse(temp, request.unit());};}@BeanCommandLineRunner runner(ChatClient chatClient) {return args -> {String response = chatClient.prompt().user("巴黎和阿姆斯特丹的天气如何?").functions("weatherFunction")  // 引用 Bean 名称.call().content();System.out.println(response);  // 输出:阿姆斯特丹 20℃,巴黎 25℃};}
}record WeatherRequest(String location, String unit) {}
record WeatherResponse(double temp, String unit) {}

2. 流式响应实现

通过 stream() 方法支持实时逐令牌输出,提升交互体验:

@RestController
public class ChatController {private final OpenAiChatModel chatModel;@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatModel.stream(prompt);  // 流式返回响应}
}

四、实战示例:构建基础聊天接口

1. 控制器实现

创建 REST 端点处理用户输入并返回生成结果:

@RestController
public class ChatController {private final OpenAiChatModel chatModel;@Autowiredpublic ChatController(OpenAiChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map<String, String> generate(@RequestParam String message) {String response = chatModel.call(message);  // 同步调用模型return Collections.singletonMap("result", response);}
}

2. 禁用无关功能(如 Embedding)

由于 Docker Model Runner 暂不支持 Embedding,需显式关闭:

spring.ai.openai.embedding.enabled=false

五、最佳实践与注意事项

  1. 模型选择:确保 spring.ai.openai.chat.options.model 与 Model Runner 中加载的镜像标签一致(如 ai/gemma3:4B-F16)。
  2. 性能优化:通过降低 temperature(如 0.5)提升输出确定性,或调整 max-tokens 避免超长响应。
  3. 错误处理:利用 retry.exclude-on-http-codes 排除无需重试的状态码(如 404),减少无效重试。

总结:本地化 AI 开发的破局之道

本文通过 Docker Model Runner 与 Spring AI 的集成实践,展示了如何快速构建可控、可扩展的本地化聊天服务。核心优势包括:

  • 低成本部署:无需依赖云端 API,降低数据传输延迟与成本;
  • 灵活扩展:支持多模型热插拔,通过函数调用无缝连接外部服务;
  • 企业级适配:细粒度的配置体系满足高可用、高性能需求。

随着 AI 应用的落地深化,本地化推理与框架级集成将成为企业构建智能应用的核心竞争力。通过 Spring AI 的标准化接口与 Docker Model Runner 的模型管理能力,开发者可聚焦业务逻辑,加速 AI 功能落地。

延伸阅读

  • Spring AI 升级指南
  • OpenAI 函数调用规范

相关文章:

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务&#xff1a;从配置到函数调用全解析 前沿&#xff1a;本地化 AI 推理的新范式 随着大语言模型&#xff08;LLM&#xff09;应用的普及&#xff0c;本地化部署与灵活扩展成为企业级 AI 开发的核心需求。Do…...

【数据机构】2. 线性表之“顺序表”

- 第 96 篇 - Date: 2025 - 05 - 09 Author: 郑龙浩/仟墨 【数据结构 2】 文章目录 数据结构 - 2 -线性表之“顺序表”1 基本概念2 顺序表(一般为数组)① 基本介绍② 分类 (静态与动态)③ 动态顺序表的实现**test.c文件:****SeqList.h文件:****SeqList.c文件:** 数据结构 - 2 …...

Django ORM: values() 和 annotate() 方法详解

1. values()方法 1.1 基本概念 values()方法用于返回一个包含字典的QuerySet&#xff0c;而不是模型实例。每个字典表示一个对象&#xff0c;键对应于模型字段名称。 1.2 基本用法 # 获取所有书籍的标题和出版日期 from myapp.models import Bookbooks Book.objects.value…...

数据结构篇-二叉树

抽象定义CFG文法具体表示基本操作性质 抽象定义 二叉树是一个抽象的数学概念。它的定义是递归的 一棵二叉树可以是一个外部节点&#xff0c;一棵二叉树可以是内部节点&#xff0c;连接到一对二叉树&#xff0c;分别是它的左子树&#xff0c;和右子树。 这个抽象定义描述了二…...

前端面试每日三题 - Day 29

这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习&#xff1a; ✅ 题目1&#xff1a;Web Components技术全景解析 核心三要素 Custom Elements&#xff08;自定义元素&#xff09; class MyButton extends HTMLElement {constructor() {super();this.attachShado…...

Java设计模式之抽象工厂模式:从入门到精通

一、抽象工厂模式概述 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 1.1 专业定义 抽象工厂模式定义了一个工厂接口,用于创建一系列相关或依赖的对象,客户端通过调用抽象工…...

Rust中记录日志:fast_log

在Rust程序中记录日志&#xff0c;可以使用fast_log。 根据fast_log 的介绍&#xff0c;这是一个性能非常高的日志实现&#xff0c;还支持文件追加模式、压缩、切分与回滚等操作。 而且&#xff0c;这个库记录日志是异步的&#xff0c;即不会因为日志而影响程序的运行。只有当…...

构筑芯片行业的“安全硅甲”

在半导体行业&#xff0c;数据就是生命线。一份芯片设计图纸的泄露&#xff0c;可能让企业数亿研发投入付诸东流&#xff1b;一段核心代码的外传&#xff0c;甚至可能影响国家产业安全。然而&#xff0c;现实情况却是——许多芯片企业的数据防护&#xff0c;仍处于“裸奔”状态…...

C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程

C Dll创建 一、添加 DllMain&#xff08;必要&#xff09; #include <fstream>void Log(const char* msg) {std::ofstream f("C:\\temp\\dll_log.txt", std::ios::app);f << msg << std::endl; }BOOL APIENTRY DllMain(HMODULE hModule, DWORD u…...

使用智能表格做FMEDA

一、优点 使用智能表格替代excel做FMEDA具备以下优势&#xff1a; 减少维护成本&#xff08;数据库关联&#xff0c;修改方便&#xff09;便于持续优化&#xff08;失效率分布&#xff0c;失效率模型可重复使用&#xff09;多人同步编写&#xff08;同时操作&#xff0c;同步…...

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档 概述 本脚本real_data_model.m基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》(鲍志远&#xff0c;胡泽春)实现了电动汽车充电设施的负荷预测和可调能力评估。使用混合模型&#xff08;LSTM神经网络线…...

Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南

一、Tomcat 核心日志文件架构与核心功能 1. 三大基础日志文件对比&#xff08;权威定义&#xff09; 日志文件数据来源核心功能典型场景catalina.out标准输出 / 错误重定向包含 Tomcat 引擎日志与应用控制台输出&#xff08;System.out/System.err&#xff09;排查 Tomcat 启…...

MSF 生成不同的木马 msfvenom 框架命令

目录 什么是 msfvenom&#xff1f; 一、针对 Windows 的木马生成命令 1. EXE 格式&#xff08;经典可执行文件&#xff09; 2. VBS 脚本&#xff08;Visual Basic Script&#xff09; 3. PowerShell 脚本 4. DLL 文件&#xff08;动态链接库&#xff09; 5. Python 脚本…...

Linux云计算训练营笔记day05(Rocky Linux中的命令:管道操作 |、wc、find、vim)

管道操作 | 作用: 将前面命令的输出&#xff0c;传递给后面命令&#xff0c;作为后面命令的参数 head -3 /etc/passwd | tail -1 取第三行 head -8 /etc/passwd | tail -3 | cat -n 取6 7 8行 ifconfig | head -2 | tail -1 只查看IP地址 ifconfig | grep 192 过滤192的ip…...

【相机标定】OpenCV 相机标定中的重投影误差与角点三维坐标计算详解

摘要&#xff1a; 本文将从以下几个方面展开&#xff0c;结合典型代码深入解析 OpenCV 中的相机标定过程&#xff0c;重点阐述重投影误差的计算方法与实际意义&#xff0c;并通过一个 calcBoardCornerPositions() 函数详细讲解棋盘格角点三维坐标的构建逻辑。 在计算机视觉领域…...

传统销售VS智能销售:AI如何重构商业变现逻辑

如今最会赚钱的企业早就不靠堆人力了&#xff0c;他们都在悄悄用AI做商业变现。当普通销售还在手动记录客户信息时&#xff0c;AI销售系统已经能实时追踪客户在商品页的停留时长&#xff0c;甚至精确到秒。 传统客服人员还在机械地复制粘贴标准话术&#xff0c;AI销售却已经能根…...

从设计到开发,原型标注图全流程标准化

一、原型标注图是什么&#xff1f; 原型标注图&#xff08;Annotated Prototype&#xff09;是设计原型&#xff08;Prototype&#xff09;的详细说明书&#xff0c;通过图文结合的方式&#xff0c;将设计稿中的视觉样式、交互逻辑、适配规则等技术细节转化为开发可理解的标准…...

Mac QT水平布局和垂直布局

首先上代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> #include<QVBoxLayout>//垂直布局 #include<QHBoxLayout>//水平布局头文件 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …...

部署Superset BI(四)连接sql server数据库

sqlserver没有出现在Superset的连接可选菜单上&#xff0c;这一点让我奇怪。既然没有那就按着HANA的配置方式&#xff0c;照猫画虎。更奇怪的是安装好还不能出现&#xff0c;难道superset和微软有仇&#xff1f; --修改配置文件 rootNocobase:/usr/superset/superset# cd docke…...

Python爬虫(22)Python爬虫进阶:Scrapy框架动态页面爬取与高效数据管道设计

目录 一、背景&#xff1a;Scrapy在现代爬虫中的核心价值二、Scrapy项目快速搭建1. 环境准备与项目初始化2. 项目结构解析 三、动态页面处理&#xff1a;集成Splash与中间件1. 配置Splash渲染服务&#xff08;Docker部署&#xff09;2. 修改settings.py启用中间件3. 在Spider中…...

全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型

一、引言&#xff1a;从纸质堆叠到数据安全的“最后一公里” 在数字化转型浪潮中&#xff0c;全球企业每年仍产生超过1.2万亿页纸质文件&#xff0c;其中包含大量机密数据、客户隐私及商业敏感信息。据QYResearch预测&#xff0c;2031年全球实物文件粉碎服务市场规模将达290.4…...

使用Python 打造多格式文件预览工具 — 图、PDF、Word、Excel 一站式查看

在日常办公或文件管理场景中&#xff0c;我们经常面临这样的问题&#xff1a;在一个文件夹中短时间内产生了大量不同类型的文件&#xff08;如图片、PDF、Word、Excel&#xff09;&#xff0c;我们需要快速浏览和筛选这些文件的内容&#xff0c;却不希望一个个打开它们。有没有…...

Microsoft 365 Copilot:为Teams在线会议带来多语言语音交流新体验

随着AI技术的飞速发展&#xff0c;Microsoft 365 Copilot将大型语言模型&#xff08;LLM&#xff09;与业务数据深度融合&#xff0c;为用户带来了前所未有的办公体验。在Teams在线会议中&#xff0c;Copilot不仅能够作为智能助手提升会议效率&#xff0c;还能通过实时辅助同声…...

c++:双向链表容器(std::list)

目录 &#x1f9f1; 一、什么是 std::list&#xff1f; ⚙️ 二、底层结构图解 &#x1f9ea; 三、list 的常见操作 &#x1f4e6; 四、完整示例代码 &#x1f4cc; 五、特点总结对比 &#x1f6e0; 六、特殊函数 &#x1f4da; 七、list 迭代器操作 ⚠️ 八、使用场景…...

jenkins 启动报错

java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解决方案&#xff1a; yum install freetype-devel 安装完成之后重启jenkins。...

输入顶点坐标输出立方体长宽高的神经网络

写一个神经网络&#xff0c;我输入立方体投影线段的三视图坐标&#xff0c;输出分类和长宽高 import torch from torch import nn import torch.nn.functional as F# 假设每个视图有8个顶点&#xff0c;每个顶点有2个坐标值&#xff0c;因此每种视图有16个输入特征 input_dim…...

Layui表格行点击事件监听

​ 在 Layui 中&#xff0c;如果想监听表格行的点击事件&#xff0c;可以通过以下步骤实现&#xff1a; 初始化表格&#xff1a;首先确保你已经使用 Layui 的 table.render 方法成功渲染了你的表格。绑定行点击事件&#xff1a;Layui 并没有直接提供针对表格行点击的事件监听器…...

2025数维杯数学建模竞赛B题完整参考论文(共38页)(含模型、代码、数据)

2025数维杯数学建模竞赛B题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、定义与符号说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...

TCP套接字通信核心要点

TCP套接字通信核心要点 通信模型架构 客户端-服务端模型 CS架构&#xff1a;客户端发起请求&#xff0c;服务端响应和处理请求双向通道&#xff1a;建立连接后实现全双工通信 服务端搭建流程 核心步骤 创建套接字 int server socket(AF_INET, SOCK_STREAM, 0); 参数说明&am…...

Android屏蔽通话功能和短信功能

需求开发中&#xff0c;有个要求屏蔽电话功能和短信功能&#xff0c;禁止应用打电话或短信&#xff0c;禁止api开发出的应用打电话或短信。这个约束怎么做呢&#xff1f; framework/base/core/res/res/values/config.xml.....<!-- Flag indicating whether the current devi…...

STM32TIM定时中断(6)

一、TIM介绍 1、TIM简介 TIM&#xff08;Timer&#xff09;定时器 定时器的基本功能&#xff1a;定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断。 即定时触发中断&#xff0c;同时也可以看出&#xff0c;定时器就是一个计数器&#xff0c;当…...

hz2新建Keyword页面

新建一个single-keywords.php即可&#xff0c;需要筛选项再建taxonomy-knowledge-category.php 参考&#xff1a;https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products&#xff0c;现在想实现自定义产品分类下的…...

STL?vector!!!

一、前言 之前我们借助手撕string加深了类和对象相关知识&#xff0c;今天我们将一起手撕一个vector&#xff0c;继续深化类和对象、动态内存管理、模板的相关知识 二、vector相关的前置知识 1、什么是vector&#xff1f; vector是一个STL库中提供的类模板&#xff0c;它是存储…...

Android SDK

Windows纯净卸载Android SDK 1.关闭所有安卓相关的程序 Android StudioEmulators 如模拟器Command prompts using SDK 如appium服务 2.移除SDK相关目录 # Delete your SDK directory F:\android_sdk\android-sdk-windows# Also check and remove if present: $env:LOCALAPP…...

老旧 LabVIEW 系统升级改造

在工业自动化领域&#xff0c;LabVIEW 凭借其直观的图形化编程方式和强大的数据处理能力&#xff0c;成为开发测试测量与控制系统的主流平台。然而&#xff0c;随着技术的快速迭代和业务需求的不断变化&#xff0c;许多早期开发的 LabVIEW 系统逐渐暴露出性能不足、功能缺失或兼…...

【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径

【IDEA_Maven】永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径 问题解决 问题 Maven使用在线导入&#xff0c;在网络不佳时&#xff0c;往往加载很慢。十分浪费时间&#xff0c;所以我们需要在maven官网找到合适版本的maven&#xff0c;将其压缩包下载下来…...

VSCode远程无法选择虚拟环境问题

1. 无法选择虚拟环境 1.先保证扩展安装正确&#xff0c; 安装python&#xff0c;pylance和intelliCode 2. 直接在设置&#xff08;ctrl shift p&#xff09;里面搜索&#xff0c;点击“Python:Select Interpreter”选项 3. 可能有人会出现第三步的问题&#xff0c;参考链接…...

七、Hadoop 历史追踪、数据安全阀与 MapReduce初体验

Hadoop 实战拾遗&#xff1a;作业历史追踪、数据安全阀与 MapReduce 巧算 π 一、追溯作业足迹&#xff1a;JobHistory Server 的配置与使用 Hadoop 集群高效运行的背后&#xff0c;离不开对已完成作业的细致分析。JobHistory Server (JHS) 就像是作业的“黑匣子”&#xff0…...

【MySQL】联合查询

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 一、什么是联合查询 1.概念 2.语法要求 3.示例 4.为什么要使用联合查询 内连接 1.概念 2.语法 3.步骤&#xff1a; 外连接 1.概念 2.分类&#xff1a; 左外连…...

Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现

设计思路&#xff1a; 1、保存代码文件 ✅ 目的&#xff1a; 将用户提交的源码以字符串形式写入磁盘&#xff0c;生成 .java 文件。 &#x1f4cc; 原因&#xff1a; Java 是静态语言&#xff0c;必须先编译成 .class 文件才能运行。 需要物理文件路径来调用 javac 或使用 Java…...

课程设计。。。。

人脸考勤系统 需求分析 需求 1.实现企业日常人脸打卡需求 2.管理员要可以管理相关数据 3.可以移植到相关嵌入式设备 …..需求主要是这些&#xff0c;还可以让ai拓展一点 实现 1.介于可移植性这个需求&#xff0c;选用Qt框架&#xff0c;Qt框架跨平台性特比好&#xff0…...

gitlab相关面试题及答案

一、GitLab 基础 1. 什么是 GitLab&#xff1f;它与 GitHub 有什么区别&#xff1f; 答案&#xff1a; GitLab 是一个开源的 DevOps 平台&#xff0c;提供代码托管、CI/CD、问题跟踪等功能。与 GitHub 的主要区别&#xff1a; 开源与商业&#xff1a;GitLab 社区版开源&#x…...

『不废话』之Python 3.14 Beta版新特性

Python 3.14 的第一个Beta版已发布&#xff0c;有几个新特性可以提高我们的编码效率。 未来注释 在上一篇《『不废话』之Python高级特性技巧-CSDN博客》中提到3.7中新增了 “未来注释”&#xff0c;可以使用“from __future__ import annotations”或双引号包括的方式解决当类…...

AWS之数据分析类产品

以下是 Amazon Athena、Amazon QuickSight、AWS Lake Formation、AWS Glue、Amazon OpenSearch Service&#xff08;原 Elasticsearch Service&#xff09;、Amazon Kinesis Data Analytics 和 Amazon Redshift 的核心区别及典型使用场景的对比分析&#xff1a; 1. Amazon Athe…...

RabbitMQ消息的重复消费问题如何解决?

在RabbitMQ中&#xff0c;消息重复消费是一个常见问题&#xff0c;它通常发生在消费者处理消息时出现网络波动、节点故障或消费者自身处理逻辑异常&#xff0c;ACK 失败等情况&#xff0c;都会导致RabbitMQ 不能够正确感知消息已被成功处理&#xff0c;从而重新投递消息。以下是…...

5月9号.

v-for: v-bind: v-if&v-show: v-model: v-on: Ajax: Axios: async&await: Vue生命周期: Maven: Maven坐标:...

如何减少极狐GitLab 容器镜像库存储?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 减少容器镜像库存储 (BASIC ALL) 未清理的容器镜像库会随着时间的推移而变大。添加大量镜像或标签时&#xff1a; 获取可用标…...

怎么用idea打jar包

背景 前端使用vue开发&#xff0c;打包生成dist文件&#xff0c;需要打包成jar包 步骤 前端的dict文件放到后端的src\main\resources目录下dict文件夹改名为staticidea打开后端代码&#xff0c;依次点击右侧maven下的clean 、package最后会在项目的target目录下生成jar&…...

03 mysql 连接

安装 MySQL 后,我们就需要连接它。 使用命令行方式连接使用图形化工具连接一、使用命令行客户端连接 在上一节内容02 mysql 管理(Windows版)-CSDN博客 我们采用的就是这个连接方法,这种方法直接连接的是root用户,找到该命令行属性,打开可以看到里面的参数是root: 这种…...

Jenkins集成Maven

一、概述 Jenkins是一个开源的持续集成工具&#xff0c;用于自动化各种开发任务。Maven是一个项目管理和构建自动化工具&#xff0c;主要用于Java项目。通过将Jenkins和Maven集成&#xff0c;可以实现自动化构建、测试和部署&#xff0c;提高开发效率和代码质量。 二、前提条…...