进公司后,上头安排了一个自动任务的开发,大概就是有一个自动任务,然后还有一个分任务,主任务与分任务中间通过zhu外键关联。
本来自动任务的直接使用反射就可以实现,不过却需要传递参数。通过百度最终解决了。做一个总结,避免忘记。
主任务的代用代码:
//根据路径获取类信息
Class classSchedule = Class.forName(scheduleClass);
//根据参数获取类的构造函数
Constructor css = classSchedule.getConstructor(String.class);
//执行反射
Runnable obj = (Runnable) css.newInstance(RunningCd);
其中 css.newInstance(RunningCd) 会直接代用 反射类带有参数的构造方法。如下面的代码
public BsdSheduleRunningSqlController(String runningCd){
this.runningCd = runningCd;
}
// 自动任务控制器
@Override
public void run() {
System.out.println(runningCd+"");
System.out.println("第一次查找");
List<BsdSheduleRunningSql> bsdSheduleRunningSqlList = findRunningSQLByRunningCd(runningCd);
if(bsdSheduleRunningSqlList.size()>0){
for(BsdSheduleRunningSql bsSql:bsdSheduleRunningSqlList){
System.out.println("第二次执行");
SheduleRunningMothd(bsSql.getRunningSql());
}
}else{
System.out.println("没有需要的执行任务");
}
}
该自动任务业务的部分代码,真正阐述的并不是自动任务,而是反射技术传递参数的应用。
毕竟 不同的框架定义的自动任务方式并不是一样的。有兴趣的同志们可以看一下不同框架的自动任务实现。