10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

job 在数据库中存储是是一个 class name,意味着其实际的执行内容是可以随时变的—— 它跟着class 文件而变。

 
这其实给与了 我们很大的灵活性!
 
 
job 是线程安全的? 答案是 yes,因为:quartz 是根据 表的 jobClass 字段, 每次创建job 实例,然后执行的!
 
 
 
job 里面可以有成员变量, 但是 因为每次job 都是被new 出来的, 所以如果其属性如不是static,那么每次都要实例这个任务类。。
 
 
//这个属性如不是static,那么每次都要实例这个任务类,始终打印为: 1
private static int _counter = 1;
 

import java.text.SimpleDateFormat;  
import java.util.Date;  
import org.quartz.DisallowConcurrentExecution;  
import org.quartz.Job;  
import org.quartz.JobDataMap;  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.quartz.JobKey;  
import org.quartz.PersistJobDataAfterExecution;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
  
@PersistJobDataAfterExecution  
@DisallowConcurrentExecution  
public class ColorJob implements Job {  
  
    private static Logger _log = LoggerFactory.getLogger(ColorJob.class);      
     
    public static final String FAVORITE_COLOR = "favorite color";  
    public static final String EXECUTION_COUNT = "count";      
     
    //这个属性如不是static,那么每次都要实例这个任务类,始终打印为: 1  
    private static  int _counter = 1;  
     
    public ColorJob() {  
    }    
    public void execute(JobExecutionContext context)  
        throws JobExecutionException {  
  
        
        JobKey jobKey = context.getJobDetail().getKey();          
         
        JobDataMap data = context.getJobDetail().getJobDataMap();  
        String favoriteColor = data.getString(FAVORITE_COLOR);  
        int count = data.getInt(EXECUTION_COUNT);  
          
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");          
          
        _log.error("任务Key: " + jobKey + " ,执行时间:  " + sdf.format(new Date()) + "\n" +  
            "  传递参数(favorite color): " + favoriteColor + "\n" +   
            "  传递参数(count):  " + count + "\n" +   
            "  ColorJob静态变量值: " + _counter);  
       
        count++;  
        data.put(EXECUTION_COUNT, count);          
        
        _counter++;  
    }  
}  

代码参考 https://blog.csdn.net/yimeng528/article/details/84415579

posted on 2021-08-22 13:55  CanntBelieve  阅读(278)  评论(0编辑  收藏  举报