java动态执行的job_spring-dynamic-job

#spring-dynamic-job

项目用Maven管理

使用的技术与版本号

Java (1.7)

Spring (3.2.2.RELEASE)

Quartz (2.2.3)

mysql-connector-java (5.1.35)

使用说明

Check-out代码, 使用IDE(如IDEA) 打开, 配置应用服务器(如TOMCAT)

修改spring-dynamic-job.properties文件,并创建数据库(默认数据为名sdj),并运行others/quartz_mysql_innodb.sql文件初始化数据库

启用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);

帮助与改进

如果在使用项目的过程中发现任何的BUG或者更好的提议, 建议将其提交到项目的 Issues 中,

我会一直关注并不断改进项目.

以hive的角度检查语法: with cur_dim_comb as (SELECT DISTINCT t.dim_comb ,t.var_sub_class ,t.acc_value FROM gerp.cux_cst_data_alloc_his t WHERE t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id )) select tp.bd_code --事业部编码 ,tp.bd_name --事业部名称 ,hp.ou_code --OU名称 ,hp.ou_name --OU编码 ,op.main_class_desc --差异大类 ,op.acc_value --科目代码 ,op.acc_desc --科目名称 ,op.dim_comb --区分维度 ,op.begin_amount --期初余额 ,op.accrual_amount --本期发生 ,op.balance_diff_alloc_amount --期末差异结存 ,op.var_sub_class ,op.main_class_value ,op.org_id ,op.period_name ,op.job_ver_id from (select up.* ,q1.* from (SELECT DISTINCT maincl.* ,t.* FROM t inner join (SELECT fv.flex_value ,fv.description FROM fv inner join fs on fv.flex_value_set_id = fs.flex_value_set_id AND fs.flex_value_set_name = 'CUX_CST_VARIANCE_TYPE' AND fv.enabled_flag = 'Y' AND fv.hierarchy_level = '2' AND fv.flex_value LIKE '10%' ) maincl on t.var_main_class = maincl.flex_value inner join cur_dim_comb on cur_dim_comb.var_sub_class = t.var_sub_class and cur_dim_comb.acc_value = t.acc_value WHERE 1 = 1 AND t.top_var_type = '10' AND t.job_ver_id in (SELECT ver.job_ver_id AS p_job_ver_id FROM gerp.cux_cst_dist_jobs_all job INNER JOIN gerp.cux_cst_dist_jobs_vers_all ver ON job.job_id = ver.job_id) ORDER BY maincl.description ,t.acc_value ,cur_dim_comb.dim_comb ) up inner join (SELECT t1.* ,SUM(t1.begin_amount) begin_amount ,SUM(t1.accrual_amount) accrual_amount ,SUM(t1.balance_diff_alloc_amount) balance_diff_alloc_amount FROM gerp.cux_cst_data_alloc_his t1 LEFT JOIN gerp.cux_cst_data_alloc_his t ON t1.top_var_type = '10' AND t1.var_sub_class = t.var_sub_class --p_var_sub_class AND t1.org_id = t.org_id --p_org_id AND t1.period_name = t.period_name --p_period_name AND t1.job_ver_id = t.job_ver_id --p_job_ver_id AND t1.acc_value = t.acc_value --p_acc_value WHERE t1.dim_comb in (select distinct dim_comb from cur_dim_comb) group by t1.org_id,t1.period_name,t1.job_ver_id,t1.var_sub_class,t1.acc_value ) q1 on q1.org_id = up.org_id --p_org_id AND q1.period_name = up.period_name --p_period_name AND q1.job_ver_id = up.job_ver_id --p_job_ver_id AND q1.var_sub_class = up.var_sub_class --p_var_sub_class AND q1.acc_value = up.acc_value --p_acc_value ) op
05-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值