(本计划任务脚本仅供参考,实际应用效果需要自行根据实际场景进行代码调整。)
需求说明:
计划任务推送只在工作日执行,需要跳过周末、节假日。
实现思路:
因为法定节假日每年的具体日期存在差异,并且可能因为补班导致周末也是需要上班的,所以每年的工作日也是不固定的。
对于此需求,可以在数据库中维护一张日历表,并且有一列标记列,例如为0则代表节假日,为1则代表工作日,通过查询标记列的值,来判断是否要执行计划任务推送。
参考方案:
先创建一个日历表,手动维护节假日,例如下:ID为编号、date为日期、tag为标记列,来判断是否为工作日。
创建计划任务,定制代码如下:
importPackage(Packages.smartbi.sdk.service.datasource); importClass(java.text.SimpleDateFormat); //获取当前日期 var currDateStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //声明数据源id,(“这里填写需要的数据源id”) var datasrcId="DS.mysqljiejiar"; //声明sql语句,将当前日期作为参数传递 var sql="select tag from calendar where date='"+currDateStr+"'"; var datasrcService =new DataSourceService(connector); //new一个DataSourceServic对象 var Data = datasrcService.executeNoCacheable(datasrcId,sql); //调用executeNoCacheable方法执行插入 //查到标记值,判断是否要执行计划任务 var a = Data.get(0, 0).getValue(); if(a==1){ //这里写计划任务推送的主代码 }else{ logger.debug("-----------------不执行------------------"); }