struts2+quartz定时任务

article/2025/9/24 0:32:23
最近有需求要写一个定时任务 目的是更新一些员工/人员与部门之间的关系 
项目用的是struts2 当我加了spring的jar包之后写了一个定时任务 项目经理不让用spring 就修改一下 这次贴个全的 
下面是任务类
package com.timetask.action;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapExecutor;
import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
import com.util.SqlMap;/*** Quartz定时任务* 更新* @author Administrator**/
public class TimeTaskAction {/*定时任务方法*/public void exec() throws SQLException{System.out.println("quartz定时任务开始");try {List<Map> companys = SqlMap.getSqlMap().queryForList("timetask.findAll_company");updateDept(companys);update_sys_yuang();} catch (Exception e) {e.printStackTrace();}System.out.println("quartz定时任务结束!");}/*递归更新部门表corpid*/public void updateDept(List<Map> list){try {for (Map map : list) {SqlMap.getSqlMap().update("timetask.updatetta_by_depid",map.get("DEPID").toString());SqlMap.getSqlMap().update("timetask.updatetta",map.get("DEPID").toString());List<Map> listLevel = SqlMap.getSqlMap().queryForList("timetask.findSubsidiary",map.get("DEPID").toString());if(listLevel.size()>0){updateDept(listLevel);}}} catch (SQLException e) {System.out.println("ibatis执行sql失败");e.printStackTrace();}}/*sys_yuang 表 corpid与sys_dept表corpid同步*/public void update_sys_yuang(){try {long starttime = System.currentTimeMillis();SqlMap.getSqlMap().update("timetask.update_sys_yuang_corpid");long endtime = System.currentTimeMillis()-starttime;	System.out.println(endtime);} catch (SQLException e) {System.out.println("存储过程调用失败:"+e.getMessage());e.printStackTrace();}}}

上面是任务类,下面是struts2-quartz配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><!-- 要调用的工作类 --><bean id="timetask" class="com.timetask.action.TimeTaskAction"></bean><!-- 定义调用对象和调用对象的方法 --><bean id="mainJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject"><ref bean="timetask"/></property><property name="targetMethod"><value>exec</value></property></bean><!-- 定义触发时间 --><!-- 创建触发器   触发器保存任务的执行时间--><bean id="timeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="mainJob"></property><!-- 每晚20:01分触发 --><property name="cronExpression" value="0 1 20 * * ?"></property></bean><bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref local="timeTrigger"/></list></property></bean>
</beans>

这是web.xml配置文件

下面是oracle的SQL的xml

把存储过程贴一下 其实就是俩游标

create or replace procedure update_userAndyuang_corpid
as
cursor cur is select d.depid,d.corpid,u.rowid row_id from sys_dept d,sys_user u where u.depid=d.depid order by u.rowid;
cursor cury is select d.depid,d.corpid,u.rowid row_id from sys_dept d,sys_yuang u where u.depid=d.depid order by u.rowid;
v_count number;begin
v_count :=0;
for r in cur loopupdate sys_user set corpid=r.corpid where rowid=r.row_id;v_count:=v_count+1;if(v_count>=1000) thencommit;v_count:=0;end if;
end loop;
commit;
for r in cury loopupdate sys_yuang set corpid=r.corpid where rowid=r.row_id;v_count:=v_count+1;if(v_count>=1000) thencommit;v_count:=0;end if;
end loop;
commit;
end update_userAndyuang_corpid;

成功执行了

完成


http://chatgpt.dhexx.cn/article/xjZM4uds.shtml

相关文章

Quartz定时任务框架使用教程详解

Quartz定时任务框架学习 什么是QuartzQuartz依赖引入使用 QuartzQuartz API&#xff0c;Jobs和TriggersJob 和 Trigger为什么既有 Job&#xff0c;又有 Trigger 呢&#xff1f;Key Job与JobDetail介绍为什么设计成JobDetail Job&#xff0c;不直接使用JobJobDataMapJob实例Job…

quartz定时任务不执行

quartz定时任务执行一段时间不执行的原因 数据库表QRTZ_TRIGGERS 里的TRIGGER_STATE 字段的值自动修改为ERROR了 ,quartz定时任务是不扫描这种ERROR情况. 之所以出现ERROR 原因在于job里有bug,导致quartz自动将状态改变,然后quartz不执行ERROR状态的job. 1.查找原因 原因如下图…

SpringBoot结合Quartz实现定时任务

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建SpringBoot集成Mybatis项目实操SpringBoot集成MybatisPlus项目实操SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Liquibase…

Quartz定时任务不定时执行

请移步&#xff1a; https://editor.csdn.net/md/?articleId126933515 手动执行才执行。 cron表达式是 1分钟执行3次&#xff0c;一直正常的。 cron "0 */20 * * * ?"依次报错&#xff1a; 后定时任务不再执行了。 手动触发可以正常执行。 Job taskJob (Job…

Springboot 使用quartz 定时任务 增删改查

前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 &#xff0c;浏览量还不错 &#xff0c; Springboot 整合定时任务 ) 所以就准备写第二篇&#xff0c; 如果你是一名Java工程师&#xff0c;你也可以会看到如下的页面 &#xff0c;去添加定时任务 定时任务展示 :…

JAVA - Quartz 定时任务_启动原理

JAVA - Quartz 定时任务_启动原理 前言 在开发过程中&#xff0c;我们会用定时任务来执行一些操作&#xff0c;例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求 简单的定时任务实现可以借助Spring提供的 Scheduled 注解 详细看 Spring 原理之 Scheduled …

如何应用quartz定时任务?

Quartz可以用来做什么&#xff1f; Quartz是一个强大任务调度框架&#xff0c;我工作时候会在这些情况下使用到quartz框架&#xff0c;当然还有很多的应用场景&#xff0c;在这里只列举2个实际用到的 餐厅系统会在每周四晚上的22点自动审核并生成报表人事系统会在每天早晨8点…

Quartz定时任务基础学习

Quartz基础笔记 前言 1、什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。 2、Quartz的运行环境是什么&#xff1f; Quartz可以运行嵌入在一个独立式应用程序Quartz可以在应用服务器或者Servlet容器实例化&#xff0c;并且参与事务Quartz可…

Quartz定时任务

Java实现定时任务的方式 一、线程等待&#xff08;不建议使用&#xff0c;任务复杂时存在内存泄露风险&#xff09; Thread myThread new Thread(new Runnable() {Overridepublic void run() {while (true) {System.out.println("TestThreadWait is called!");try…

java定时任务Quartz整理

目录 一、Quartz介绍 二、Quartz的组成 三、使用java实现一个简单的Quartz例子 四、使用Springboot整合Quartz定时任务框架 五、使用Springbootmybatis整合Quartz定时任务框架实现定时向数据库插入一条数据 六、总结 七、参考资料 一、Quartz介绍 quartz是一种基于java…

Quartz之定时任务

一 基础概念 1.什么是Quartz? Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;完全由Java开发&#xff0c;可以用来执行定时任务&#xff0c;类似于 java.util.Timer。但是相较于Timer&#xff0c; Quartz增加了很多功能&#xff1a;(1).持久性…

定时任务框架Quartz

目录 一、Quartzh介绍 1、Quartz的定义&#xff1a; 2、Quartz完成定时任务的原理&#xff1a; 二、cron表达式 1、cron表达式定义 2、cron表达式规范 三、spring自带调度器 四、Quartz内存版集成基本使用 1、关于Quartz内存版集成的步骤 1、先到启动类中写好集成的步骤 2、…

定时任务:Quartz 详解

定时任务&#xff1a;Quartz 详解 文章目录 定时任务&#xff1a;Quartz 详解1 Quartz是什么&#xff1f;2 Quartz核心组成3 Quartz核心模块理解3.1 用工厂模式理解 Quartz 的设计机制&#xff1a;3.2 用流程图理解 Quartz 的核心模块关系&#xff1a; 4 Quartz详解4.1 Quartz的…

Linux 环境下的 for循环嵌套学习

题目&#xff1a;输出下面的 4*5 的矩阵&#xff1a; 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 解: 首先打开Xfce终端&#xff0c;创建c文件&#xff0c; 并用gedit记事本打开它。 touch zhanglong.c gedit zhanglong.c之后输入代码&#xff1a; #include<std…

for循环嵌套编程练习

1 编程要求:求出用50元,20元和10元换算100元有几种方式? 思路:用穷举法,将所有可能的情况都列举出来,用for循环可以实现穷举 分析:100元单用50换算,最多需要两张,用20元最多换算5张,用10元最多换算10张 #include<stdio.h> int main(void) {int w,e,s; // w代表…

c语言99乘法表循环嵌套写法,99乘法表(for循环嵌套)

计算乘法表 两个数相乘,外层循环代表被乘数,控制行数;内层代表乘数,控制列数。 循环嵌套,变量名不可以重复。 使用 break 语句让输出的乘法表更简洁。 使用 String 变量,做 String 的加法。 public class MultiTabble {public static void main(String[] args) {for (int…

关于For循环嵌套的简单理解

一&#xff1a;循环语句的嵌套 一个循环结构内可以含有另一个循环&#xff0c;称为循环嵌套&#xff0c;又称多重循环。常用的循环嵌套是二重循环&#xff0c;外层循环称为 外循环&#xff0c;内层循环称为内循环。 二&#xff1a;双重循环&#xff1a; 1.双重循环结构 for (循…

for循环嵌套的三种用法

目前本人了解到的常用的三种for循环嵌套&#xff0c;以下是对这三种循环嵌套的理解&#xff1a; 一&#xff1a;内外循环联动 var arr [[10, 20, 30],[hello, hi, world],[a, b, c]]for (var i 0; i < arr.length;i){let innerArr arr[i];for(var j 0;j < innerArr…

多重for循环嵌套

for循环定义&#xff1a; 同过一个简单的表达式&#xff0c;来完成多次重复性的代码功能&#xff1b;格式如下&#xff1a; for&#xff08;变量初始值&#xff1b;变量取值范围&#xff1b;变量自增/自减&#xff09;{ //代码块&#xff1b; } 一个复杂的for循环中可以嵌…

JS中的for循环嵌套

for 循环 for语句也是一种前测试循环语句&#xff0c;但它具有在 执行循环之前初始化变量 和 定义循环后要执行的代码的能力 for循环中专门提供了位置来放置循环的三个表达式 定义一个循环需要做实现这三步&#xff1a; 1、初始化表达式 2、条件表达式 3、更新表达式 通…