一. SSM 整合Quartz 前的准备
编写一个简单的Demo, 将Quartz 框架真正的放置到我们的 SSM项目里面, 用Maven 进行构建项目。
关于 Maven 构建 SSM框架, 可以参考老蝴蝶以前写的文章: Maven整合SSM项目(七)
这个代码太多,就不复制出来了。 后面会把这个项目的链接放置进来,可以下载查看。
仍然使用的是简单的 user 表, 存在于 quartz 数据库里面。
创建各种配置文件,各个目录结构如下所示:
像上一章节那样, 将 Quartz 框架融入到里面, applicationContext-job.xml 配置文件,就是配置 quartz的信息的。
二. SSM 整合 Quartz
设置一个定时,每10s 往 user 表里面添加一条数据, 插入的数据信息为 ‘两个蝴蝶飞’ 的信息。
UserServiceImpl 实现类已经配置了事务和 @Service(“userService”) 注解
二.一 工作任务实现
那么,此时的工作任务就应该是:
public class MyJob extends QuartzJobBean{ @Resource(name="userService") private UserService userService; @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { //要做的事,是打印当前的时间 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化时间 String dateString=sdf.format(new Date()); System.out.println("备份数据库的时间是:"+dateString); User user=new User(); user.setName("两个蝴蝶飞"); user.setAge(24); user.setSex("男"); user.setDescription("一个希望得到快乐的程序员"); userService.addUser(user); System.out.println("添加成功"); } }
二.二 编写测试文件
编写 JobTest 测试类
package com.yjl.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) //引入配置文件 ,由于将 job和 spring 分开了,所以这儿用的是 -*, 而不能单单写 -job.xml @ContextConfiguration(value={"classpath*:/spring/applicationContext-*.xml"}) public class JobTest { @Test public void test(){ System.out.println("CronTrigger 是否运行任务呢?"); //需要休眠40s后,执行5次后,再关闭, 不然启动测试后直接关闭,看不出效果。 try { Thread.sleep(40000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
二.三 测试运行
控制台打印输出:
38行,指的是
userService.addUser(user);
NPE异常,则表示 userService 是null的, 即 userService 没有注入进来。
有两种方式可以解决这个问题