# spring-dynamic-job **Repository Path**: zp_spring/spring-dynamic-job ## Basic Information - **Project Name**: spring-dynamic-job - **Description**: Spring Quartz, 定时任务,动态定时任务 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 50 - **Created**: 2019-02-28 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #spring-dynamic-job 项目用Maven管理 使用的技术与版本号
  1. Java (1.7)
  2. Spring (3.2.2.RELEASE)
  3. Quartz (2.2.3)
  4. mysql-connector-java (5.1.35)

使用说明
  1. Check-out代码, 使用IDE(如IDEA) 打开, 配置应用服务器(如TOMCAT)
  2. 修改spring-dynamic-job.properties文件,并创建数据库(默认数据为名sdj),并运行others/quartz_mysql_innodb.sql文件初始化数据库
  3. 启用TOMCAT, 访问

项目的核心对象为: DynamicSchedulerFactory
该项目已在 HeartBeat 项目中实际使用, 更多运用案例可查看该项目.

动态的Job定义类: DynamicJob, 在动态操作Job时的类必须是该类的子类(参考TestDynamicJob)
固定执行的Job示例类: TestFixedJobDetailBean, 配置在XML中,启动时加载,固定执行.
更多的操作请参考类: TestServiceImpl

如果不使用数据库(内存中存储job信息), 取消 dataSource 的配置与引用项


详细使用 定时任务分两类, 固定的与动态的 一.固定的 - 即指固定时间执行(如每天凌晨2点, 或每隔30秒执行) 1.参考TestFixedJobDetailBean类写具体的实现 2.在idp2.xml中配置 job (参照注释部分)
1). 配置 JobDetailFactoryBean
2).配置 CronTriggerFactoryBean 注意 cronExpression 的值配置在job.properties
对于 cronExpression 的写法, 请参考 http://blog.csdn.net/caiwenfeng_for_23/article/details/17004213
3).将CronTriggerFactoryBean 添加到 schedulerFactory 的
提示: 对于 cronExpression 可使用 CronExpression.java 类 进行测试 二.动态的 - 即在系统运行中动态添加的job(如 用户添加的 用户同步定时任务) 1.参考 TestDynamicJob 类写具体的实现 2.在需要使用时 创建对应的 DynamicJob 对象,参考如下: //创建 一个动态的JOB, 测试用 private DynamicJob createDynamicJob() { return new DynamicJob("test-") //动态定时任务的 cron, 每20秒执行一次 .cronExpression("0/20 * * * * ?") .target(TestDynamicJob.class); } 提示: Job name 要具体, cronExpression 一般根据时间对象(Date)来生成, target对第1步新建的对象 3.如果在Job执行时有参数, 加上对应的参数名与参数值(可多个), 如下:
DynamicJob dynamicJob = createDynamicJob(); dynamicJob.addJobData("mailGuid", UUID.randomUUID().toString());//transfer parameter 这样在Job实现类中可通过 context 来获取,如下:
final Object mailGuid = context.getMergedJobDataMap().get("mailGuid");
4.向 DynamicSchedulerFactory 中注册job, 如下:
 DynamicSchedulerFactory.registerJob(dynamicJob);

帮助与改进
  1. 与该项目相关的博客请访问 http://blog.csdn.net/monkeyking1987/article/details/42173277

  2. 若没有找到解决办法的, 欢迎发邮件到shengzhao@shengzhaoli.com一起讨论.

  3. 如果在使用项目的过程中发现任何的BUG或者更好的提议, 建议将其提交到项目的 Issues 中, 我会一直关注并不断改进项目.


关注更多我的开源项目请访问 http://andaily.com/my_projects.html