1、代码实现
定时器:
<bean id="userjob" class="com.gloryscience.base.priv.UserTask"/>
<bean id="eventTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="userjob"/>
<property name="targetMethod" value="eventQuartz"/>
</bean>
<bean id="doEventTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="eventTask"/>
<!--表达式,每天1点执行一次 -->
<property name="cronExpression" value="0 0 1 ? * *"/>
</bean>
<bean id="startQuertz" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false">
<property name="triggers">
<list>
<!--作业调度器,list下可加入其他的调度器-->
<ref bean="doTime"/>
<ref bean="doEventTime"/>
<ref bean="doMyjobTask1Time"/>
<ref bean="doMyjobTask2Time"/>
<ref bean="doneCatoryjobTaskTime"/>
</list>
</property>
</bean>
public class UserTask {
@Autowired
private UserService userService; // 用户的业务组件
@Autowired
private AlarmEventService alarmEventService; //事件业务
@Autowired
private EventStatisticsService eventStatisticsService;
@Autowired
private CbatDeviceService cbateService;
/**
* 用户定时任务 超过有效时间的用户设置为锁定
*
* @throws BusinessException
*
* */
public void userQuartz() throws BusinessException {
List<User> users = userService.getInvalidUser();
for (User user : users) {
user.setStatus(EUserStatus.Disable);
}
userService.save(users);
}
………………………………………………
2、数据库
Job里定义一个作业,progarm:action里执行存储过程,
CREATE OR REPLACE PACKAGE BODY "HISTORY_PACKAGES" as
--高负载局端统计
PROCEDURE HIGH_OVERLOAD_CBAT_PRO AS
v_err_num NUMBER;
v_err_msg VARCHAR2(100);
CURSOR HIGH_OVERLOAD_CURSOR IS
SELECT hs.HS_ID, hs.LOCATION, hs.IPADDRESS,hm.hmd_num,HS.AREA_ID,HS.COMPANY_ID,C.on_num
FROM HS_DEVICE hs,(SELECT hm.hs_id,sum(hm.hmd_num) hmd_num FROM HS_MODULE hm GROUP BY hm.hs_id) hm,
(SELECT hs_id,sum(case when h.is_onoff='Y' then 1 else 0 end) on_num from HS_HMD h GROUP BY h.hs_id)C
WHERE hs.hs_id = hm.hs_id(+)
and HS.hs_id = c.hs_id(+) AND hs.DISPLAY_TYPE <> '0';
record_perf HIGH_OVERLOAD_CURSOR%rowType;
BEGIN
open HIGH_OVERLOAD_CURSOR;
loop
fetch HIGH_OVERLOAD_CURSOR
into record_perf;
exit when HIGH_OVERLOAD_CURSOR%notfound;
insert into high_overload_cbat(id, hs_id, company_id, area_id, onoff_num,hmd_num, create_time,ipaddress,location)
values (seq_high_overload_cbat.nextval,record_perf.hs_id,record_perf.company_id,record_perf.area_id,
record_perf.on_num,record_perf.hmd_num,sysdate,record_perf.ipaddress,record_perf.location);
commit;
end loop;
close HIGH_OVERLOAD_CURSOR;
EXCEPTION
WHEN OTHERS THEN
v_err_num := SQLCODE;
v_err_msg := SUBSTR(SQLERRM, 1, 100);
dbms_output.put_line('????????????HIGH_OVERLOAD_CBAT_PRO??????????????????,?????????=' ||
v_err_num || '????????????=' || v_err_msg);
END HIGH_OVERLOAD_CBAT_PRO;
end history_packages;