如何将 XxlJob 集成达梦数据库

 1. 前言

在某些情况下,你的项目可能会面临数据库选择的特殊要求,随着国产化的不断推进,达梦数据库是一个常见的选择。本篇博客将教你如何解决 XxlJob 与达梦数据库之间的 SQL 兼容性问题,以便你的任务调度系统能够在这个数据库中正常运行。

 2. 集成 XxlJob

 2.1 相关版本

首先,确保你使用的 XxlJob 版本与本文中的示例相匹配。本示例使用 XxlJob-Admin 2.4.0 版本。你可以从官方网站或 GitHub 上下载相应的版本。

Gitee地址
Github地址

 2.2 添加达梦数据库驱动

你需要添加达梦数据库的 JDBC 驱动到项目的 Maven 依赖中。以下是一个示例 Maven 依赖,确保它与你的达梦数据库版本兼容:

		<dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver</artifactId><version>1.8.0</version></dependency>

更建议去mvn仓库找寻你需要的链接依赖(或者达梦官方技术文档里也有)

2.3 配置数据库连接

在项目的配置文件中,配置达梦数据库的连接信息,包括 URL、用户名和密码。确保将这些信息配置为你的达梦数据库的实际连接信息。

spring.datasource.url=jdbc:dm://localhost:5236
spring.datasource.username=SYSDBA
spring.datasource.password=你的密码
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

2.4 初始化数据库表

XxlJob 需要一组特定的数据库表来存储任务信息和调度信息。你可以使用提供的 SQL 脚本初始化这些表。以下是 SQL 脚本的示例:

CREATE TABLE "SHENG"."XXL_JOB_USER"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"USERNAME" VARCHAR(50) NOT NULL,"PASSWORD" VARCHAR(50) NOT NULL,"ROLE" NUMBER(4,0) NOT NULL,"PERMISSION" VARCHAR(255) DEFAULT NULLNULL
);CREATE TABLE "SHENG"."XXL_JOB_REGISTRY"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"REGISTRY_GROUP" VARCHAR(50) NOT NULL,"REGISTRY_KEY" VARCHAR(255) NOT NULL,"REGISTRY_VALUE" VARCHAR(255) NOT NULL,"UPDATE_TIME" TIMESTAMP(6) NULL
);CREATE TABLE "SHENG"."XXL_JOB_LOGGLUE"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"JOB_ID" NUMBER(11,0) NOT NULL,"GLUE_TYPE" VARCHAR(50) DEFAULT NULLNULL,"GLUE_SOURCE" TEXT NULL,"GLUE_REMARK" VARCHAR(128) NOT NULL,"ADD_TIME" TIMESTAMP(6) NULL,"UPDATE_TIME" TIMESTAMP(6) NULL
);CREATE TABLE "SHENG"."XXL_JOB_LOG_REPORT"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"TRIGGER_DAY" TIMESTAMP(6) NULL,"RUNNING_COUNT" NUMBER(11,0) DEFAULT '0'NOT NULL,"SUC_COUNT" NUMBER(11,0) DEFAULT '0'NOT NULL,"FAIL_COUNT" NUMBER(11,0) DEFAULT '0'NOT NULL,"UPDATE_TIME" TIMESTAMP(6) NULL
);CREATE TABLE "SHENG"."XXL_JOB_LOG"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"JOB_GROUP" NUMBER(11,0) NOT NULL,"JOB_ID" NUMBER(11,0) NOT NULL,"EXECUTOR_ADDRESS" VARCHAR(255) NULL,"EXECUTOR_HANDLER" VARCHAR(255) NULL,"EXECUTOR_PARAM" VARCHAR(512) NULL,"EXECUTOR_SHARDING_PARAM" VARCHAR(20) NULL,"EXECUTOR_FAIL_RETRY_COUNT" NUMBER(11,0) DEFAULT '0'NOT NULL,"TRIGGER_TIME" TIMESTAMP(6) NULL,"TRIGGER_CODE" NUMBER(11,0) NOT NULL,"TRIGGER_MSG" CLOB NULL,"HANDLE_TIME" TIMESTAMP(6) NULL,"HANDLE_CODE" NUMBER(11,0) NOT NULL,"HANDLE_MSG" CLOB NULL,"ALARM_STATUS" NUMBER(4,0) DEFAULT '0'NOT NULL
);CREATE TABLE "SHENG"."XXL_JOB_LOCK"
("LOCK_NAME" VARCHAR(50) NOT NULL
);CREATE TABLE "SHENG"."XXL_JOB_INFO"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"JOB_GROUP" NUMBER(11,0) NOT NULL,"JOB_DESC" VARCHAR(255) NOT NULL,"ADD_TIME" TIMESTAMP(6) NULL,"UPDATE_TIME" TIMESTAMP(6) NULL,"AUTHOR" VARCHAR(64) NULL,"ALARM_EMAIL" VARCHAR(255) NULL,"SCHEDULE_TYPE" VARCHAR(50) DEFAULT 'NONE'NOT NULL,"SCHEDULE_CONF" VARCHAR(128) NULL,"MISFIRE_STRATEGY" VARCHAR(50) DEFAULT 'DO_NOTHING'NOT NULL,"EXECUTOR_ROUTE_STRATEGY" VARCHAR(50) NULL,"EXECUTOR_HANDLER" VARCHAR(255) NULL,"EXECUTOR_PARAM" VARCHAR(512) NULL,"EXECUTOR_BLOCK_STRATEGY" VARCHAR(50) NULL,"EXECUTOR_TIMEOUT" NUMBER(11,0) DEFAULT '0'NOT NULL,"EXECUTOR_FAIL_RETRY_COUNT" NUMBER(11,0) DEFAULT '0'NOT NULL,"GLUE_TYPE" VARCHAR(50) NOT NULL,"GLUE_SOURCE" TEXT NULL,"GLUE_REMARK" VARCHAR(128) NULL,"GLUE_UPDATETIME" TIMESTAMP(6) NULL,"CHILD_JOBID" VARCHAR(255) NULL,"TRIGGER_STATUS" NUMBER(4,0) DEFAULT '0'NOT NULL,"TRIGGER_LAST_TIME" NUMBER(13,0) DEFAULT '0'NOT NULL,"TRIGGER_NEXT_TIME" NUMBER(13,0) DEFAULT '0'NOT NULL
);CREATE TABLE "SHENG"."XXL_JOB_GROUP"
("ID" BIGINT IDENTITY(1,1) NOT NULL,"APP_NAME" VARCHAR(64) NOT NULL,"TITLE" VARCHAR(50) NOT NULL,"ADDRESS_TYPE" NUMBER(4,0) DEFAULT '0'NOT NULL,"ADDRESS_LIST" TEXT NULL,"UPDATE_TIME" TIMESTAMP(6) NULL
);SET IDENTITY_INSERT "SHENG"."XXL_JOB_GROUP" ON;
INSERT INTO "SHENG"."XXL_JOB_GROUP"("ID","APP_NAME","TITLE","ADDRESS_TYPE","ADDRESS_LIST","UPDATE_TIME") VALUES(1,'xxl-job-executor-sample','示例执行器',0,null,'2023-11-02 17:28:36.084000');
INSERT INTO "SHENG"."XXL_JOB_GROUP"("ID","APP_NAME","TITLE","ADDRESS_TYPE","ADDRESS_LIST","UPDATE_TIME") VALUES(2,'lpsHandler','lpsHandler',0,null,'2023-11-02 17:28:36.083000');SET IDENTITY_INSERT "SHENG"."XXL_JOB_GROUP" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_INFO" ON;
INSERT INTO "SHENG"."XXL_JOB_INFO"("ID","JOB_GROUP","JOB_DESC","ADD_TIME","UPDATE_TIME","AUTHOR","ALARM_EMAIL","SCHEDULE_TYPE","SCHEDULE_CONF","MISFIRE_STRATEGY","EXECUTOR_ROUTE_STRATEGY","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_BLOCK_STRATEGY","EXECUTOR_TIMEOUT","EXECUTOR_FAIL_RETRY_COUNT","GLUE_TYPE","GLUE_SOURCE","GLUE_REMARK","GLUE_UPDATETIME","CHILD_JOBID","TRIGGER_STATUS","TRIGGER_LAST_TIME","TRIGGER_NEXT_TIME") VALUES(1,1,'测试任务1','2018-11-03 22:21:31.000000','2018-11-03 22:21:31.000000','XXL','','CRON','0 0 0 * * ? *','DO_NOTHING','FIRST','demoJobHandler','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2018-11-03 22:21:31.000000','',0,0,0);
INSERT INTO "SHENG"."XXL_JOB_INFO"("ID","JOB_GROUP","JOB_DESC","ADD_TIME","UPDATE_TIME","AUTHOR","ALARM_EMAIL","SCHEDULE_TYPE","SCHEDULE_CONF","MISFIRE_STRATEGY","EXECUTOR_ROUTE_STRATEGY","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_BLOCK_STRATEGY","EXECUTOR_TIMEOUT","EXECUTOR_FAIL_RETRY_COUNT","GLUE_TYPE","GLUE_SOURCE","GLUE_REMARK","GLUE_UPDATETIME","CHILD_JOBID","TRIGGER_STATUS","TRIGGER_LAST_TIME","TRIGGER_NEXT_TIME") VALUES(3,2,'lpsHandler','2023-11-02 17:19:53.438000','2023-11-02 17:28:25.716000','刘品水','','CRON','0/1 * * * * ? ','DO_NOTHING','FIRST','lpsHandler','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2023-11-02 17:19:53.438000','',1,1698917841000,1698917842000);SET IDENTITY_INSERT "SHENG"."XXL_JOB_INFO" OFF;
INSERT INTO "SHENG"."XXL_JOB_LOCK"("LOCK_NAME") VALUES('schedule_lock');SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG" ON;
INSERT INTO "SHENG"."XXL_JOB_LOG"("ID","JOB_GROUP","JOB_ID","EXECUTOR_ADDRESS","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_SHARDING_PARAM","EXECUTOR_FAIL_RETRY_COUNT","TRIGGER_TIME","TRIGGER_CODE","TRIGGER_MSG","HANDLE_TIME","HANDLE_CODE","HANDLE_MSG","ALARM_STATUS") VALUES(13,2,3,null,'lpsHandler','',null,0,'2023-11-02 17:20:25.518000',500,'任务触发类型:手动触发<br>调度机器:192.168.55.2<br>执行器-注册方式:自动注册<br>执行器-地址列表:null<br>路由策略:第一个<br>阻塞处理策略:单机串行<br>任务超时时间:0<br>失败重试次数:0<br><br><span style="color:#00c0ef;" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>调度失败:执行器地址为空<br><br>',null,0,null,2);SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG_REPORT" ON;
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(1,'2023-11-02 00:00:00.000000',0,0,113,null);
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(2,'2023-11-01 00:00:00.000000',0,0,0,null);
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(3,'2023-10-31 00:00:00.000000',0,0,0,null);SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG_REPORT" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOGGLUE" ON;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOGGLUE" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_REGISTRY" ON;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_REGISTRY" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_USER" ON;
INSERT INTO "SHENG"."XXL_JOB_USER"("ID","USERNAME","PASSWORD","ROLE","PERMISSION") VALUES(1,'admin','e10adc3949ba59abbe56e057f20f883e',1,null);SET IDENTITY_INSERT "SHENG"."XXL_JOB_USER" OFF;
ALTER TABLE "SHENG"."XXL_JOB_USER" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_REGISTRY" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_LOGGLUE" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_LOG_REPORT" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_LOG_REPORT" ADD CONSTRAINT "I_TRIGGER_DAY" UNIQUE("TRIGGER_DAY") ;ALTER TABLE "SHENG"."XXL_JOB_LOG" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_LOCK" ADD CONSTRAINT  PRIMARY KEY("LOCK_NAME") ;ALTER TABLE "SHENG"."XXL_JOB_INFO" ADD CONSTRAINT  PRIMARY KEY("ID") ;ALTER TABLE "SHENG"."XXL_JOB_GROUP" ADD CONSTRAINT  PRIMARY KEY("ID") ;CREATE UNIQUE INDEX "I_USERNAME"
ON "SHENG"."XXL_JOB_USER"("USERNAME");CREATE INDEX "I_G_K_V"
ON "SHENG"."XXL_JOB_REGISTRY"("REGISTRY_GROUP","REGISTRY_KEY","REGISTRY_VALUE");COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."JOB_ID" IS '任务,主键ID';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_TYPE" IS 'GLUE类型';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_SOURCE" IS 'GLUE源代码';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_REMARK" IS 'GLUE备注';CREATE INDEX "I_TRIGGER_TIME"
ON "SHENG"."XXL_JOB_LOG"("TRIGGER_TIME");CREATE INDEX "I_HANDLE_CODE"
ON "SHENG"."XXL_JOB_LOG"("HANDLE_CODE");COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."ID" IS '主键ID';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."JOB_GROUP" IS '执行器主键ID';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."JOB_ID" IS '任务,主键ID';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_ADDRESS" IS '执行器地址,本次执行的地址';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_HANDLER" IS '执行器任务handler';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_PARAM" IS '执行器任务参数';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_SHARDING_PARAM" IS '执行器任务分片参数,格式如 1/2';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_FAIL_RETRY_COUNT" IS '失败重试次数';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_TIME" IS '调度-时间';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_CODE" IS '调度-结果';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_MSG" IS '调度-日志';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_TIME" IS '执行-时间';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_CODE" IS '执行-状态';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_MSG" IS '执行-日志';COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."ALARM_STATUS" IS '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."JOB_DESC" IS '任务描述';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."SCHEDULE_TYPE" IS '调度类型';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."SCHEDULE_CONF" IS '调度配置,值含义取决于调度类型';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."MISFIRE_STRATEGY" IS '调度过期策略';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_ROUTE_STRATEGY" IS '执行器路由策略';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_HANDLER" IS '执行器任务handler';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_PARAM" IS '执行器任务参数';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_BLOCK_STRATEGY" IS '阻塞处理策略';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_TIMEOUT" IS '任务执行超时时间,单位秒';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_FAIL_RETRY_COUNT" IS '失败重试次数';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_TYPE" IS 'GLUE类型';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_SOURCE" IS 'GLUE源代码';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_REMARK" IS 'GLUE备注';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_UPDATETIME" IS 'GLUE更新时间';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."CHILD_JOBID" IS '子任务ID,多个逗号分隔';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_STATUS" IS '调度状态:0-停止,1-运行';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_LAST_TIME" IS '上次调度时间';COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_NEXT_TIME" IS '下次调度时间';COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."APP_NAME" IS '执行器AppName';COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."TITLE" IS '执行器名称';COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."ADDRESS_TYPE" IS '执行器地址类型:0=自动注册、1=手动录入';COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."ADDRESS_LIST" IS '执行器地址列表,多地址逗号分隔';

以上 SQL 脚本中包括了创建必需的表和插入默认登录账号。注意,你可以根据自己的需求自定义这些表。

 2.5 更新 XML文件XxlJobLogMapper.xml&&XxlJobRegistryMapper.xml

XxlJob 与达梦数据库之间存在 SQL 兼容性问题,因此需要对 XxlJob 的 SQL 映射进行修改。以下是 XML的示例修改,确保 XxlJob 能够在达梦数据库中正常运行:

XxlJobLogMapper.xml

	<select id="findFailJobLogIds" resultType="long" >SELECT ID FROM SHENG.XXL_JOB_LOGWHERE NOT ((TRIGGER_CODE IN (0, 200) AND HANDLE_CODE = 0)OR(HANDLE_CODE = 200))AND ALARM_STATUS = 0ORDER BY ID ASCLIMIT #{pagesize}</select>

XxlJobRegistryMapper.xml

	<select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >SELECT t.IDFROM SHENG.XXL_JOB_REGISTRY tWHERE t.UPDATE_TIME &lt; DATEADD(SECOND, -#{timeout} , #{nowTime})</select><select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">SELECT <include refid="Base_Column_List" />FROM SHENG.XXL_JOB_REGISTRY tWHERE t.UPDATE_TIME &lt; DATEADD(SECOND, -#{timeout} , #{nowTime})</select>

 2.6 运行 XxlJob

现在,你可以启动 XxlJob 服务,它将连接到达梦数据库并开始正常运行。确保你的配置和数据库初始化都已经完成。

 3. 总结

通过按照上述步骤将 XxlJob 集成到达梦数据库中,你可以解决 SQL 兼容性问题,确保任务调度系统在达梦数据库中正常运行。在选择数据库时,始终考虑到项目需求、性能和兼容性,以便做出明智的选择。

这些步骤应该为你提供了成功集成 XxlJob 和达梦数据库所需的指导。祝你的任务调度系统顺利运行!如果你遇到问题 评论区留言 我看到都会帮着解决的~

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

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

相关文章

章鱼网络进展月报 | 2023.10.1-10.31

章鱼网络大事摘要 1、Louis 成功竞选 NDC 的 HoM 议席&#xff0c;将会尽最大努力推动 NEAR 变革。2、章鱼网络受邀参加在土耳其主办的 Cosmoverse2023&#xff0c;分享 Adaptive IBC 的技术架构。3、2023年10月8日章鱼日&#xff0c;是章鱼网络主网上线2周年的纪念日。 …

机器学习---SVM目标函数求解,SMO算法

1. 线性可分支持向量机 1.1 定义输入数据 假设给定⼀个特征空间上的训练集为&#xff1a; 其中&#xff0c;(x , y )称为样本点。 x 为第i个实例&#xff08;样本&#xff09;。 y 为x 的标记&#xff1a; 当y 1时&#xff0c;x 为正例&#xff1b;当y −1时&#xff0c;x…

vue3项目实践

创建 vue3 项目 node本版&#xff1a;node 16.x.x&#xff0c; 脚手架&#xff1a;create-vue 脚手架工具&#xff0c;底层vite 创建vue3项目&#xff1a;npm init vuelatest setup函数 vue3 单文件组件 1、vite.config.js配置文件基于vite的配置 2、template模板不再要求唯…

docker compose实现容器编排

Compose 使用的三个步骤&#xff1a; 使用 Dockerfile 定义应用程序的环境 使用 compose.yml 定义构成应用程序的服务&#xff0c;这样它们可以在隔离环境中一起运行 最后&#xff0c;执行 docker compose up 命令来启动并运行整个应用程序 为什么需要docker compose Dock…

万宾科技管网水位监测助力智慧城市的排水系统

以往如果要了解城市地下排水管网的水位变化&#xff0c;需要依靠人工巡检或者排查的方式&#xff0c;这不仅加大了人员的工作量&#xff0c;而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况&#xff0c;都会降低市政府对排水管网的管理能力&a…

SpringBoot配置文件优先级

1.idea临时属性 说明&#xff1a;Program arguments配置--server.port8082 --ab&#xff1b;意思是将端口改成了8082。这个优先级最高。 2.resource 说明&#xff1a;创建config文件里面的yml文件。 3.jar包同级&#xff08;yml&#xff09; 说明&#xff1a;创建一个yml文件…

如何去除视频水印?三种简便有效的方法解决视频水印问题

在当今社交媒体时代&#xff0c;视频分享已成为一种流行趋势。然而&#xff0c;很多人在分享自己的作品时却苦于视频上存在的水印&#xff0c;水印通常是出于版权保护或品牌推广的目的而添加到视频中的&#xff0c;但有时它们可能会对用户体验造成负面影响。 如果您正在寻找如何…

渗透工具使用及思路总结(持续更新)

扫描类 nmap 快速扫描开放端口 nmap --min-rate 10000 -p- 10.129.252.63扫描详细全服务 nmap -sV -A -p 22,80 10.129.252.63 nmap -sV -A -p- 10.129.252.63-l:显示正在监听的 TCP 和 UDP 端口; -a:显示所有活动的 TCP 连接; -A <网络类型>或 - <网络类型&g…

苹果加大对印度的扶持,提高在其生产iphone的比重

KlipC报道&#xff1a;跟踪苹果产业链&#xff0c;有分析师预计2023年全球约12%-14%的iphone在印度生产&#xff0c;预计2024年&#xff0c;印度将生产20%-25%的iphone。 KlipC的合伙人Andi D表示&#xff1a;“近年来随着苹果对中国的以来&#xff0c;印度已经成为高科技制造和…

0003Java安卓程序设计-springboot基于Android的学习生活交流APP

文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合&#xff0c;利用java技术建设学习生活交流APP&…

[PyTorch][chapter 59][强化学习-2-有模型学习]

前言&#xff1a; 在已知模型的环境里面学习,称为有模型学习&#xff08;model-based learning&#xff09;. 此刻,下列参数是已知的&#xff1a; : 在状态x 下面,执行动作a ,转移到状态 的概率 : 在状态x 下面,执行动作a ,转移到 的奖赏 有模型强化学习的应用案例 …

解决vmware安装ubuntu虚拟机显示不全以及无法实现windows与虚拟机之间无法相互复制粘贴问题

01、存在问题 02、解决方案 sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop reboot //重启重启后界面如下&#xff1a; 存在Bug 如果遇到一下问题&#xff0c;请先执行下列命令&#x…

.NET Framework中自带的泛型委托Func

Func<>是.NET Framework中自带的泛型委托&#xff0c;可以接收一个或多个输入参数&#xff0c;并且有返回值&#xff0c;和Action类似&#xff0c;.NET基类库也提供了多达16个输入参数的Func委托&#xff0c;输出参数只有1个。 1、Func泛型委托 .NET Framework为我们提…

陕西某小型水库雨水情测报及大坝安全监测项目案例

项目背景 根据《陕西省小型病险水库除险加固项目管理办法》、《陕西省小型水库雨水情测报和大坝安全监测设施建设与运行管理办法》的要求&#xff0c;为保障水库安全运行&#xff0c;对全省小型病险水库除险加固&#xff0c;建设完善雨水情测报、监测预警、防汛道路、通讯设备、…

【word技巧】ABCD选项如何对齐?

使用word文件制作试卷&#xff0c;如何将ABCD选项全部设置对齐&#xff1f;除了一直按空格或者Tab键以外&#xff0c;还有其他方法吗&#xff1f;今天分享如何将ABCD选项对齐。 首先&#xff0c;我们打开【替换和查找】&#xff0c;在查找内容输入空格&#xff0c;然后点击全部…

回溯算法--4后问题

1.问题描述 四皇后问题&#xff1a;在4 4 的方格棋盘上放置4个皇后&#xff0c;使得没有两个皇后在同一行、同一列、也不在同一条45度的斜线上。问有多少种可能的布局&#xff1f; 解是4维向量 比如上面这个解<2,4,1,3> 分别表示圆圈的第2列、第4列等 还可以得到另一解…

javaSE学习笔记-未完

目录 前言 一、java基础 1.1概述 1.java语言发展史 2.Java语言版本 3.Java语言平台 4.Java语言特点 5.Java语言跨平台原理-可移植性 6.JRE和JDK的概述 7.JDK的下载和安装 8.JDK安装路径下的目录解释 9.path环境变量的作用及配置方式 10.classpath环境变量的作用及…

包装印刷行业万界星空科技云MES解决方案

印刷业的机械化程度在国内制造行业内算是比较高的&#xff0c;不算是劳动密集型企业。如书本的装订、包装的模切、烫金、糊盒等都已经有了全自动设备。印刷厂除了部分手工必须采用人工外&#xff0c;大部分都可以采用机器&#xff0c;也就意味着可以由少量工人生产出大量产品。…

Java Jar 包还不知道怎么反编译,赶紧看看这个 IDEA 插件!

前言 当我们使用 Java 开发时&#xff0c;经常会遇到一种情况&#xff1a;我们拿到了一个 JAR 文件&#xff0c;但是却没有源代码。这时候&#xff0c;我们就需要使用反编译工具来帮助我们还原出源代码。 反编译工具可以将编译后的 JAR 文件转换回可读的 Java 源代码。这样&a…

vscode设置保存后,自动格式化代码

第一步&#xff1a;打开setting.json文件 第二步&#xff1a;在setting.json中加入以下代码 "editor.formatOnType": true, "editor.formatOnSave": true, "editor.formatOnPaste": true