spring定时调用数据库存储过程

先说一下,公司是做警用系统的,要求很严格,局方服务器一律windows,每一个任务都要解释清楚,所以才有了定时调用存储过程只能在项目里实现。

问题:项目要实现每天调用存储过程统计一些数据。

思路:通过spring配置定时器实现

实现:1、需要下载 quartz的jar包,我下载的是quartz-1.8.5.jar。ps:但是偷懒并没有下载最新的jar包
            官网:http://www.quartz-scheduler.org/downloads

            maven:http://grepcode.com/project/repo1.maven.org/maven2/org.quartz-scheduler/quartz/

            2、在configs文件夹下创建spring-timer.xml 文件,如图是我的工程:
          

          在web.xml中配置sping的加载:
    

        在spring-timer.xml中,配置如下:


        先是调度工厂,配好之后,指示到  CronTriggerBean

 配置CronTriggerBean

1、需要定义要执行的任务,<property name="jobDetail" ref="SpringQtzJobMethod"></property>
2、调用时间,<property name="cronExpression" value="0 0 00 * * ?"></property>
注意其中的空格,第一个0空:0-59秒,第二个:0-59分钟,第三个:0-23小时,第四个是:日期 1-31,第五个是:月份 1-12 或者 JAN-DEC,第六个是:星期 1-7 或者 SUN-SAT,我的定义为每天的00:00:00调用

ps:其实还有第七个是年份,年(可选) 留空, 1970-2099

配置好SpringQtzJobMethod,还需配置SpringQtzJob

SpringQtzJob指向com.hctec.rfid.service.zonghe.IntegratedQueryManager是我项目中要调用存储过程的类

SpringQtzJobMethod指向的是com.hctec.rfid.service.zonghe.IntegratedQueryManager中我要调用的方法

底层实现为:

up_casewoodbase()为我数据库中定义的存储过程名


设置好之后,发布程序,会在eclipse控制台打印出:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用Spring的任务调度框架和Spring的JdbcTemplate来实现根据数据库动态设置定时任务。 首先,需要定义一个定时任务执行的接口,例如: ```java public interface JobInterface { void execute(); } ``` 然后,创建一个任务调度类,用于定时执行任务。在这个类中,可以通过JdbcTemplate查询数据库,获取需要执行的任务列表,并动态添加定时任务。例如: ```java @Component public class JobScheduler { private final TaskScheduler scheduler; private final JdbcTemplate jdbcTemplate; @Autowired public JobScheduler(TaskScheduler scheduler, JdbcTemplate jdbcTemplate) { this.scheduler = scheduler; this.jdbcTemplate = jdbcTemplate; } @PostConstruct public void scheduleJobs() { List<JobEntity> jobList = jdbcTemplate.query("SELECT * FROM job", new BeanPropertyRowMapper<>(JobEntity.class)); for (JobEntity job : jobList) { scheduler.schedule(new Runnable() { @Override public void run() { try { // 获取任务类名 Class<?> clazz = Class.forName(job.getClassName()); // 获取任务执行器 JobInterface jobInterface = (JobInterface) clazz.newInstance(); // 执行任务 jobInterface.execute(); } catch (Exception e) { e.printStackTrace(); } } }, new CronTrigger(job.getCron())); } } } ``` 其中,JobEntity是数据库中存储的任务实体类,包含任务类名和任务执行时间表达式。在scheduleJobs方法中,通过JdbcTemplate查询数据库获取任务列表,然后遍历任务列表,动态添加定时任务。当定时任务被触发时,会执行任务类中的execute方法。 需要注意的是,在执行任务类的时候需要使用反射机制获取任务类的实例,并调用execute方法执行任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值