タイミングタスクの--Quartz

12470 ワード

1.システムでは、動的な変更と手動トリガをサポートするタイミングタスクが最も一般的です.
タイミングタスク項目に多かれ少なかれ使用されるべきです
2.依存関係を最初に追加:

            org.quartz-scheduler
            quartz
            2.3.0


3.定時タスクデータベースの作成:定時タスク記録表、定時タスク記録表、
CREATE TABLE `cl_quartz_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '  ',
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '      ',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '    code  ',
  `cycle` varchar(32) NOT NULL DEFAULT '' COMMENT '        ',
  `class_name` varchar(64) NOT NULL DEFAULT '' COMMENT '       ',
  `succeed` int(11) NOT NULL DEFAULT '0' COMMENT '      ',
  `fail` int(11) NOT NULL DEFAULT '0' COMMENT '      ',
  `state` varchar(2) NOT NULL DEFAULT '' COMMENT '     10-   20-  ',
  `create_time` datetime NOT NULL COMMENT '    ',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='       ';


CREATE TABLE `cl_quartz_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '  ',
  `quartz_id` bigint(20) DEFAULT '0' COMMENT '    id',
  `start_time` datetime DEFAULT NULL COMMENT '    ',
  `time` int(11) DEFAULT '0' COMMENT '    ',
  `result` varchar(2) DEFAULT '20' COMMENT '       10-   20-  ',
  `remark` varchar(128) DEFAULT '' COMMENT '    ',
  PRIMARY KEY (`id`),
  KEY `quartz_id` (`quartz_id`)
) ENGINE=InnoDB AUTO_INCREMENT=708 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='         ';

4.2つのテーブルのエンティティークラスを作成する

/**
 *         
 */
 public class QuartzInfo implements Serializable {

    private static final long serialVersionUID = 1L;

	/**
	 *   Id
	 */
	private Long id;

	/**
	 *       
	 */
	private String name;

	/**
	 *       
	 */
	private String code;

	/**
	 *         
	 */
	private String cycle;

	/**
	 *        
	 */
	private String className;

	/**
	 *       
	 */
	private Integer succeed;

	/**
	 *       
	 */
	private Integer fail;

	/**
	 *      10-   20-  
	 */
	private String state;

	/**
	 *     
	 */
	private Date createTime;

	/**
	 *     Id
	 *
	 * @return id
	 */
	public Long getId() {
		return id;
	}

	/**
	 *     Id
	 * 
	 * @param
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 *         
	 *
	 * @return       
	 */
	public String getName() {
		return name;
	}

	/**
	 *         
	 * 
	 * @param name
	 *                      
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 *         
	 * 
	 * @return code
	 */
	public String getCode() {
		return code;
	}

	/**
	 *         
	 * 
	 * @param code
	 */
	public void setCode(String code) {
		this.code = code;
	}

	/**
	 *           
	 *
	 * @return         
	 */
	public String getCycle() {
		return cycle;
	}

	/**
	 *           
	 * 
	 * @param cycle
	 *                        
	 */
	public void setCycle(String cycle) {
		this.cycle = cycle;
	}

	/**
	 *          
	 *
	 * @return        
	 */
	public String getClassName() {
		return className;
	}

	/**
	 *          
	 * 
	 * @param className            
	 */
	public void setClassName(String className) {
		this.className = className;
	}

	/**
	 *         
	 *
	 * @return       
	 */
	public Integer getSucceed() {
		return succeed;
	}

	/**
	 *         
	 * 
	 * @param succeed
	 *                      
	 */
	public void setSucceed(Integer succeed) {
		this.succeed = succeed;
	}

	/**
	 *         
	 *
	 * @return       
	 */
	public Integer getFail() {
		return fail;
	}

	/**
	 *         
	 * 
	 * @param fail
	 *                      
	 */
	public void setFail(Integer fail) {
		this.fail = fail;
	}

	/**
	 *        10-   20-  
	 *
	 * @return      10-   20-  
	 */
	public String getState() {
		return state;
	}

	/**
	 *        10-   20-  
	 * 
	 * @param state
	 *                     10-   20-  
	 */
	public void setState(String state) {
		this.state = state;
	}

	/**
	 *       
	 *
	 * @return     
	 */
	public Date getCreateTime() {
		return createTime;
	}

	/**
	 *       
	 * 
	 * @param createTime
	 *                    
	 */
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

5.定時タスク記録表エンティティクラス
/**
 *         
 */
 public class QuartzLog implements Serializable {

    private static final long serialVersionUID = 1L;

	/**
	 *   Id
	 */
	private Long id;

	/**
	 *     id
	 */
	private Long quartzId;

	/**
	 *     
	 */
	private Date startTime;

	/**
	 *     
	 */
	private long time;

	/**
	 *        10-   20-  
	 */
	private String result;
	
	/**
	 *     
	 */
	private String remark;

	/**
	 *     Id
	 *
	 * @return id
	 */
	public Long getId() {
		return id;
	}

	/**
	 *     Id
	 * 
	 * @param       Id
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 *       id
	 *
	 * @return     id
	 */
	public Long getQuartzId() {
		return quartzId;
	}

	/**
	 *       id
	 * 
	 * @param quartzId
	 *                    id
	 */
	public void setQuartzId(Long quartzId) {
		this.quartzId = quartzId;
	}

	/**
	 *       
	 *
	 * @return     
	 */
	public Date getStartTime() {
		return startTime;
	}

	/**
	 *       
	 * 
	 * @param startTime
	 *                    
	 */
	public void setStartTime(Date startTime) {
		this.startTime = startTime;
	}

	/**
	 *       
	 *
	 * @return     
	 */
	public long getTime() {
		return time;
	}

	/**
	 *       
	 * 
	 * @param time
	 *                    
	 */
	public void setTime(long time) {
		this.time = time;
	}

	/**
	 *          10-   20-  
	 *
	 * @return        10-   20-  
	 */
	public String getResult() {
		return result;
	}

	/**
	 *          10-   20-  
	 * 
	 * @param result
	 *                       10-   20-  
	 */
	public void setResult(String result) {
		this.result = result;
	}

	/**
	 * @return the remark
	 */
	public String getRemark() {
		return remark;
	}

	/**
	 * @param remark the remark to set
	 */
	public void setRemark(String remark) {
		this.remark = remark;
	}

6.タイミングタスクインタフェース

/**
 *       Service
 */
public interface QuartzInfoService{


	/**
	 *         
	 * @param qi
	 */
	boolean save(QuartzInfo qi);

	/**
	 *       
	 * @param search
	 * @return
	 */
	boolean update(Map search);

	/**
	 *       
	 * @param result
	 * @return
	 */
	List list(Map result);

	/**
	 *         
	 * @param searchMap
	 * @param current
	 * @param pageSize
	 * @return
	 */
	Page page(Map searchMap, int current,
							   int pageSize);
	
	/**
	 *          
	 * @param paramMap
	 * @return
	 */
	QuartzInfo findByCode(String code);
	
	/**
	 *            
	 * @param paramMap
	 * @return
	 */
	QuartzInfo findSelective(Map paramMap);

7.実装クラス
import com.github.pagehelper.Page;
import com.itcorey.domain.QuartzLog;
import com.itcorey.model.QuartzLogModel;

import java.util.Map;

/**
 *       Service
 */
public interface QuartzLogService {

	/**
	 *     
	 */
	int save(QuartzLog ql);

	Page page(Map searchMap, int current,
							  int pageSize);

}

8.2つのModelクラス、タイミングタスク記録Model
import com.itcorey.domain.QuartzLog;

/**
 *       Model
 */
public class QuartzLogModel extends QuartzLog {

	private static final long serialVersionUID = 1L;

	/**      -    */
	public static final String RESULT_SUCCESS = "10";
	/**      -    */
	public static final String RESULT_FAIL = "20";

	/**
	 *     
	 */
	private String name;

	/**
	 *           
	 */
	private String resultStr;

	/**
	 *       
	 *
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/**
	 *       
	 *
	 * @param name
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 *             
	 *
	 * @return resultStr
	 */
	public String getResultStr() {
		this.resultStr = convertResult(this.getResult());
		return resultStr;
	}

	/**
	 *             
	 *
	 * @param resultStr
	 */
	public void setResultStr(String resultStr) {
		this.resultStr = resultStr;
	}

	/**
	 *           
	 * @param result
	 * @return
	 */
	public static String convertResult(String result) {
		String resultStr = " - ";
		if (QuartzLogModel.RESULT_SUCCESS.equals(result)) {
			resultStr = "    ";
		} else if (QuartzLogModel.RESULT_FAIL.equals(result)) {
			resultStr = "    ";
		}
		return resultStr;
	}
}

タイミングタスク詳細Model
import com.itcorey.domain.QuartzInfo;

import java.util.Date;

/**
 *        Model
 */
public class QuartzInfoModel extends QuartzInfo {
	
	private static final long serialVersionUID = 1L;
	
	/**    -    */
	public static final String STATE_ENABLE = "10";

	/**    -    */
	public static final String STATE_DISABLE = "20";
	/**
     *       
     * 
     * @param state
     * @return
     */
    public static String stateConvert(String state) {
        String stateStr;
        if (ChannelModel.STATE_DISABLE.equals(state)) {
            stateStr = "  ";
        } else {
            stateStr = "  ";
        }
        return stateStr;
    }
    
	
	/**
	 *       
	 */
	private String stateStr;
	
	/**
	 *       
	 */
	private Date lastStartTime;

	/**
	 *         
	 * @return stateStr
	 */
	public String getStateStr() {
		this.stateStr = stateConvert(this.getState());
		return stateStr;
	}

	/**
	 *         
	 * @param stateStr
	 */
	public void setStateStr(String stateStr) {
		this.stateStr = stateStr;
	}

	/**
	 *         
	 * 
	 * @return lastStartTime
	 */
	public Date getLastStartTime() {
		return lastStartTime;
	}

	/**
	 *         
	 * 
	 * @param lastStartTime
	 */
	public void setLastStartTime(Date lastStartTime) {
		this.lastStartTime = lastStartTime;
	}
	
}

9.タイミングタスク業務コード類:
/**
 * Created by :Corey
 * 17:37 2019/2/22
 *     
 */
public class QuartzInform implements Job {

    private static final Logger logger = Logger.getLogger(QuartzInform.class);

    /**
     *     
     * @throws ServiceException
     */
    public String repayInform() throws ServiceException {
        IUserService userService = (IUserService) BeanUtil.getBean("IUserService");
        logger.info("      ......");
        String quartzRemark = null;
        int succeed = 0;
        int fail = 0;
        int total = 0;
        //      
        List list = userService.getAllUser();
        if (!list.isEmpty()) {
            for (User user : list) {
                System.out.println("user"+user.getUserName());
            }
        }
        logger.info("          ......");
        quartzRemark = "     "+total+",  "+succeed+" ,  "+fail+" ";
        return quartzRemark;
    }

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        QuartzInfoService quartzInfoService = (QuartzInfoService)BeanUtil.getBean("quartzInfoService");
        QuartzLogService quartzLogService = (QuartzLogService)BeanUtil.getBean("quartzLogService");
        QuartzLog ql = new QuartzLog();
        Map qiData = new HashMap<>();
        QuartzInfo qi = quartzInfoService.findByCode("doRepayInform");
        try {
            qiData.put("id", qi.getId());
            ql.setQuartzId(qi.getId());
            ql.setStartTime(DateUtil.getNow());

            String remark = repayInform();

            ql.setTime(DateUtil.getNow().getTime()-ql.getStartTime().getTime());
            ql.setResult("10");
            ql.setRemark(remark);
            qiData.put("succeed", qi.getSucceed()+1);

        }catch (Exception e) {
            ql.setResult("20");
            qiData.put("fail", qi.getFail()+1);
            logger.error(e.getMessage(),e);
        }finally{
            logger.info("        ");
            quartzLogService.save(ql);
            quartzInfoService.update(qiData);
        }
    }

}

コードの送信先:https://github.com/coreyxuy/SSM