大家好,又见面了,我是你们的朋友全栈君。
最近有需求要写一个定时任务 目的是更新一些员工/人员与部门之间的关系
项目用的是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 loop
update sys_user set corpid=r.corpid where rowid=r.row_id;
v_count:=v_count+1;
if(v_count>=1000) then
commit;
v_count:=0;
end if;
end loop;
commit;
for r in cury loop
update sys_yuang set corpid=r.corpid where rowid=r.row_id;
v_count:=v_count+1;
if(v_count>=1000) then
commit;
v_count:=0;
end if;
end loop;
commit;
end update_userAndyuang_corpid;
成功执行了
完成
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128719.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...