SpringBoot定时任务打成jar 引入到新的项目中后并自动执行
一、springBoot开发定时任务
①:连接数据库实现新增功能
1. 引入依赖
<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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency>
2. 配置yaml
server:port: 19000 # ????????spring:application:name: djyp-stater # ???????datasource:url: jdbc:mysql://ip地址:3306/djyp?characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 密码driver-class-name: com.mysql.cj.jdbc.Driver
3. 创建实体类
@Entity
@Table (name = "log", schema = "djyp", catalog = "")
public class LogEntity {@GeneratedValue (strategy = GenerationType.IDENTITY)@Id@Column (name = "id")private long id;@Basic@Column (name = "create_time")private Date createTime;@Basic@Column (name = "status")private Integer status;public long getId () {return id;}public void setId (long id) {this.id = id;}public Date getCreateTime () {return createTime;}public void setCreateTime (Date createTime) {this.createTime = createTime;}public Integer getStatus () {return status;}public void setStatus (Integer status) {this.status = status;}@Overridepublic boolean equals (Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;LogEntity logEntity = (LogEntity) o;return id == logEntity.id && Objects.equals(createTime, logEntity.createTime) && Objects.equals(status, logEntity.status);}@Overridepublic int hashCode () {return Objects.hash(id, createTime, status);}
}
4. 创建mapper执行SQL
@Mapper
public interface LogMapper{@Insert("insert into log(create_time) values (#{date})")int add (@Param("date") Date date);
}
②:配置logback日志

1. 引入依赖 配置yml
<!-- 引入日志框架 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>
logging:level:com.example: infopattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
2. 创建日志配置类
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.pattern.color.ANSIConstants;
import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;public class LogbackColorful extends ForegroundCompositeConverterBase<ILoggingEvent> {@Overrideprotected String getForegroundColorCode(ILoggingEvent event) {Level level = event.getLevel();switch (level.toInt()) {//ERROR等级为红色case Level.ERROR_INT:return ANSIConstants.RED_FG;//WARN等级为黄色case Level.WARN_INT:return ANSIConstants.YELLOW_FG;//INFO等级为蓝色case Level.INFO_INT:return ANSIConstants.BLUE_FG;//DEBUG等级为绿色case Level.DEBUG_INT:return ANSIConstants.GREEN_FG;//其他为默认颜色default:return ANSIConstants.DEFAULT_FG;}}
}
3. 配置xml文件(logback-spring.xml)
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!--自定义颜色配置 此处converterClass引用的是日志颜色类的路径, 此匹配的是第二种控制台色彩输出方式--><conversionRule conversionWord="customcolor" converterClass="com.sanss.djyp.config.LogbackColorful"/><appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%red(%d{HH:mm:ss.SSS}) %green([%thread]) %customcolor(%-5level) %customcolor(%logger) - %msg%n</pattern></encoder></appender><appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern> %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>logs/logbackInfo.%d.log</fileNamePattern></rollingPolicy></appender><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter><encoder><pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>logs/logbackError.%d.log</fileNamePattern></rollingPolicy></appender><root level="info"><appender-ref ref="consoleLog"/><appender-ref ref="fileInfoLog"/><appender-ref ref="fileErrorLog"/></root></configuration>
3. 配置yml(日志输出级别)
logging:level:com.example: infopattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
③:配置定时任务
1. 引入依赖
<!-- Quartz定时任务库-->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version> <!-- 使用适当的版本号 -->
</dependency>
2. 创建定时任务执行逻辑类

@Slf4j
@Component
public class MyJob {@Autowiredprivate LogMapper logMapper;@Scheduled (cron = "0/10 * * * * ?") // 每隔10秒执行一次public void execute() {// 获取当前时间LocalDateTime currentTime = LocalDateTime.now();// 创建日期时间格式化对象DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化当前时间String formattedTime = currentTime.format(formatter);log.info("定时任务执行了!" + formattedTime);LogEntity logEntity = new LogEntity();Date date = new Date();int i = logMapper.add(date);if (i > 0){log.info("插入数据成功");}else {log.error("插入数据失败");}}
}
3. 开启定时任务
在启动类上添加 @EnableScheduling 注解 必要时添加 @ComponentScan 注释
@SpringBootApplication
@EnableScheduling
@ComponentScan("com.sanss.djyp.*")
public class DjypApplication {public static void main(String[] args) {SpringApplication.run(DjypApplication.class, args);}
}
④:启动项目测试
测试成功(每隔10秒都会添加一条数据)


⑤:配置stater启动器(方法一)
作用:打成jar后在引入的新的项目中会自动执行
1.引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
2. 配置类进行注册
在
resources文件夹下面新建一个META-INF文件,并在下面创建spring.factories文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.sanss.djyp.job.MyJob

⑥:配置stater启动器(方法二)推荐
直接在启动类上添加 @Configuration 注解即可

二、 打成jar包(上传到私服中)
1.配置pom.xml插件
<!-- 上传源码 -->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configuration><attach>true</attach></configuration><executions><execution><phase>compile</phase><goals><goal>jar</goal></goals></execution></executions>
</plugin>
2.去掉springboot打包插件(否则会报错)
在springboot打包插件中添加一行

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><skip>true</skip><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration>
</plugin>
3.拓展(不去掉springboot打包插件)
发现依赖的jar包结构是这样的,多了BOOT-INF/classes
因此/META-INF/spring.factories这个文件里的配置就匹配不到,所以报错了
4. 指定部署目标(上传到那个私服中)
注意事项 报错:transfer failed for <http://localhost:8081/repository/maven-releases/com/sanss/djyp/0.0.1-SNAPSHOT/djyp-0.0.1-20230601.013826-1.jar>, status: 400 Repository version policy: RELEASE does not allow version: 0.0.1-20230601.013826-1

这个错误提示表明你的仓库版本策略不允许使用 -SNAPSHOT 版本的发布。默认情况下,Maven的 maven-releases 仓库版本策略是 RELEASE,它只允许发布稳定的、非快照版本。
要解决此问题,有两个可能的方法:
-
更新版本号:修改你的项目的版本号,移除
-SNAPSHOT后重新构建并发布。例如,将版本号从0.0.1-SNAPSHOT修改为0.0.1,然后重新执行构建和发布操作。 -
使用快照仓库:如果你想继续使用快照版本进行开发和测试,你可以配置一个专门用于快照版本的仓库。在你的
settings.xml文件中,添加一个<repository>元素,指定一个maven-snapshots仓库,并配置正确的URL和认证信息。<repository><id>maven-snapshots</id><url>http://localhost:8081/repository/maven-snapshots/</url><snapshots><enabled>true</enabled></snapshots> </repository>并在你的项目中使用
maven-snapshots仓库进行发布。
请注意,如果你选择第二种方法使用快照仓库,确保你的私有仓库正确配置了对应的 maven-snapshots 仓库,并允许使用快照版本。此外,快照版本应该仅用于开发和测试,不应该在生产环境中使用。
准备发布


<!-- 指定部署目标-->
<distributionManagement><repository><id>maven-releases</id><url>http://localhost:8081/repository/maven-releases/</url></repository>
</distributionManagement>
4. 在maven的settings.xml中添加认证信息

<server><id>maven-releases</id><!--nexus的认证id(仓库名称)--> <username>admin</username><!--nexus中的用户名密码--> <password>admin123</password> </server>
5. 运行 deploy指令 将jar包发布到私有仓库中



三、在新项目中引入jar包并自动执行
①:引入发布的jar包依赖
<dependency><groupId>com.sanss</groupId><artifactId>djyp</artifactId><version>0.0.1</version>
</dependency>
②:启动项目测试
成功

相关文章:
SpringBoot定时任务打成jar 引入到新的项目中后并自动执行
一、springBoot开发定时任务 ①:连接数据库实现新增功能 1. 引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <dependen…...
AD9371 官方例程 NO-OS 主函数 headless 梳理(一)
AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…...
SHAP 和 LIME 解释模型
内容大纲 1、SHAP 解释器1.1 案例:用于预测患者肺癌1.2 案例中使用的shap解释器1.3 SHAP工作原理1.4 举例说明 2、LIME 解释器2.1 案例:判断法律案件胜诉可能性2.2 LIME解释器工作原理2.3 本地解释模型的训练过程2.4 举例说明1:新闻分类2.4 举…...
若依vue-初步下载使用
若依框架可以满足大部分的后台管理系统的开发,使用频率也是比较高的,所以这里讲一下如何使用若依框架 若依框架代码克隆 首先去若依官网 http://www.ruoyi.vip/ 这里演示的是若依-vue版本的使用 我们点击下载 会跳转到码云仓库 或者直接点击下面的链接去码云仓库 https://git…...
Android 使用.9图 NinePatchDrawable实现动态聊天气泡
最近一段时间,在做一个需求,需要实现一个聊天气泡的动画效果,如下图所示: GitHub源码demo ,建议下载demo,运行查看。 动态聊天气泡动画 静态聊天气泡 经过一段时间调研,实现方案如下: 实现方…...
力扣 LCR 024. 反转链表两种解法
目录 1.解题思路Ⅰ2.代码实现Ⅰ3.解题思路Ⅱ4.代码实现Ⅱ 1.解题思路Ⅰ 利用头插法,遍历数组将后面的元素头插到前面的元素. 2.代码实现Ⅰ struct ListNode* reverseList(struct ListNode* head) { struct ListNode*curhead;;struct ListNode*newheadNULL;whil…...
掌握Capture One 23 Pro,打造专业级图片编辑体验!
作为一位摄影师,您是否曾经为自己的照片无法达到预期效果而烦恼?或者您是否在寻找一种能够让您轻松处理和编辑照片的工具?如果是,那么您一定不能错过Capture One 23 Pro这款图片编辑软件! Capture One 23 Pro的特点 …...
MFC-TCP网络编程服务端-Socket
目录 1、通过Socket建立服务端: 2、UI设计: 3、代码的实现: (1)、CListenSocket类 (2)、CConnectSocket类 (3)、CTcpServerDlg类 1、通过Socket建立服务端ÿ…...
ChatGPT辅助下的小组学习
1 网上分享会-主题 1.9曾子曰:“慎终追远,民德归厚矣。” Master Zeng said:“Be circumspect in funerary services and continue sacrifices to the distant ancestors, and the virtue (de 德) of the common people will thrive.” 2 过程记录 听…...
Linux相关命令
切换root用户:sudo su 串口功能测试:cutecom 某某驱动查询:nvidia-smi #xxx-smi查询某某驱动 在线安装某某程序:apt install xxx 设置文件权限chmod 常用:chmod 777 sudo chmod 600 (只有所有者…...
详解卷积神经网络结构
前言 卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下: 卷积操作解释图解…...
java读取pdf数据
目录 读取方式有两种: 方式一: 方式一所需要的maven依赖如下: 方式一读取的Java代码如下:<...
arcmap / arcgis 安装教程
ArcGIS 10.8 for Desktop 完整安装教程(含win7/8/10 32/64位下载地址亲测可用汉化) | 麻辣GIS (malagis.com) 关于GIS语言汉化包(中文)安装失败的解决办法_arcgis中文语言包_miumiuniya的博客-CSDN博客 检查安装路径:…...
CMake中的变量: 改变构建行为的变量
文章目录 变量名称描述BUILD_SHARED_LIBS全局标志,用于在启用时使add_library()创建共享库。 如果存在并且为true,则这将导致所有库被构建为共享库,除非该库被明确添加为静态库。这个变量通常作为option()添加到项目中,这样项目的…...
台式电脑怎么无损备份迁移系统到新硬盘(使用傲梅,免费的就可以)
文章目录 前言一、想要将源硬盘上的系统原封不动地迁移到新硬盘上二、准备工作2.具体步骤 总结 前言 半路接手公司一台台式电脑,C盘(120g)爆红,仅剩几个G,优化了几次,无果后。准备换一个大一点的增到500g。…...
【紫光同创国产FPGA教程】【PGC1/2KG第七章】7.数字钟实验例程
本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGC1/2KG开发平台(盘古1K/2K) 一:盘古1K/2K开发板(紫光同创PGC…...
【星海随笔】git的使用
1.在终端,检查git是否安装 git --version 2.没有安装的话去,官网,下载git 3.一直点下一步即可 4.安装后在终端检查git是否安装好 5.设置用户名和邮件地址(最好和GitHub的用户名/邮箱保持一致) git config --global user.name “自己的用户名”…...
安卓常见设计模式------装饰器模式(Kotlin版)
1. W1 是什么,什么是装饰器模式? 思想:动态地给对象添加额外的功能,通过将对象包装在一个装饰器类中,使装饰器类在不改变原始对象结构的情况下,扩展其功能。 2. W2 为什么,为什么需要使用装饰…...
将网站上的点击作为转化操作进行跟踪-官方指导文档
您可以使用转化跟踪功能,在用户点击您网站上的某个按钮或链接时进行跟踪。例如,您可以在用户点击“立即购买”按钮或点击您移动网站上的电话号码时进行跟踪。 本文介绍如何添加和修改转化跟踪代码,以便跟踪客户在您网站上的点击操作。如果希…...
Go相关命令说明
目录 Go相关命令说明go mod tidy :清理未使用依赖项,并更新模块文件主要功能好处 go clean -modcache :清除模块缓存go clean -testcache :清除测试缓存go test -v ./client :测试当前目录下client目录中的所有测试函数…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...


