springboot定時任務結合業務層

一、配置定時器表達式

在配置文件添加以下配置

cron:
#  每分鐘一次
#  zlxf: 0 0/1 * * * ?
  zlxf: 0/10 * * * * ?

注入配置屬性

@Configuration
@ConfigurationProperties(prefix = "cron")
public class CronConfiguration {
    private String zlxf;

    public String getZlxf() {
        return zlxf;
    }

    public void setZlxf(String zlxf) {
        this.zlxf = zlxf;
    }
}

二、定時器開啓關閉接口

@Api(tags ="定時任務")
@RestController
@RequestMapping("/quartz/task")
public class DynamicTaskController extends BaseController {
    private Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private CronConfiguration cronConfiguration;

    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    private ScheduledFuture<?> future1;


    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }

    @PostMapping("/startZlxf")
    @ApiOperation("開始定時任務---指令下達任務啓動")
    public ResponseStatus startZlxf()throws Exception {
        System.out.println("------------指令下達任務啓動-------------");
        try {
            future1 = threadPoolTaskScheduler.schedule(new ZlxfRunnable(),new Trigger(){
                @Override
                public Date nextExecutionTime(TriggerContext triggerContext){
                    return new CronTrigger(cronConfiguration.getZlxf()).nextExecutionTime(triggerContext);
                }
            });
            return setUrl(ResponseStatus.ok());
        }
        catch (Exception e) {
            log.error("系統異常:{}", e.getMessage());
            return setUrl(ResponseStatus.otherError(e.toString()));
        }

    }

    @PostMapping("/stopZlxf")
    @ApiOperation("關閉定時任務---指令下達任務關閉")
    public ResponseStatus stopZlxf()throws Exception {
        try {
            if (future1 != null) {
                future1.cancel(true);
            }
            System.out.println("------------指令下達任務關閉-------------");
            return setUrl(ResponseStatus.ok());
        }catch (Exception e){
            return setUrl(ResponseStatus.otherError(e.toString()));
        }
    }
}

三、創建線程類

創建線程類並上下文注入

public class ZlxfRunnable implements Runnable{

    private ZlxfService zlxfService = FrameSpringBeanUtil.getBean(ZlxfService.class);

    @Override
    public void run() {
        try {
            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            List<ZlxfVo> zlxfVoList =  zlxfService.getBySendStatus(0); //未發送
            System.out.println(zlxfVoList.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、加入上下文注入類

public class FrameSpringBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name){
        return (T) applicationContext.getBean(name);
    }

    public static <T> T getBean(Class<T> cls){
        return applicationContext.getBean(cls);
    }

}

在啓動類加入配置

@SpringBootApplication
@RestController
@RequestMapping("/")
@EnableTransactionManagement
public class SzywServerApplication {

	public static void main(String[] args) {
			 SpringApplication.run(SzywServerApplication.class,args);
		}

	@Bean
	public FrameSpringBeanUtil frameSpringBeanUtil(){
		return new FrameSpringBeanUtil();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章