package com.shkpr.service.aimodelpower.globalmgr; import com.global.base.log.LogLevelFlag; import com.global.base.log.LogPrintMgr; import com.global.base.thread.ThreadPoolProxy; import com.shkpr.service.aimodelpower.bizmgr.KprAimTapWaterBizFun; import com.shkpr.service.aimodelpower.bizmgr.KprAimWaterCollecationBizFun; import com.shkpr.service.aimodelpower.commtools.TimeTool; import com.shkpr.service.aimodelpower.constants.LogFlagBusiType; import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.*; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.sql.DataSource; import java.sql.Connection; import java.sql.Time; import java.util.Timer; import java.util.TimerTask; @Component @EnableScheduling // 1.开启定时任务 @EnableAsync // 2.开启多线程 public class ScheduleTaskMgr { private String mStrClassName; public ScheduleTaskMgr() { mStrClassName = this.getClass().getSimpleName(); } @SuppressWarnings("all") @Autowired @Qualifier("mainDatasource") private DataSource mainDataSource; @SuppressWarnings("all") @Autowired @Qualifier("secondDatasource") private DataSource secondDataSource; @PostConstruct public void afterPropertiesSet() throws Exception{ LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_INIT.toStrValue(), mStrClassName ,String.format("init()...")); } @PreDestroy public void destroy() throws Exception{ } @Scheduled(cron = "${cron.refresh.timer.clock}") public void taskRefreshTimeRes() { TimeTool.refreshUTCTimeRes(); ThreadPoolProxy.getInstance().getFixedThreadPool("COMM").execute(new Runnable() { @Override public void run() { } }); } //@Scheduled(cron = "0 0 5 * * ?") //每天凌晨05:00:00执行 //@Scheduled(initialDelay = 600000, fixedRate = 600000) //延迟10分钟后第一次调用该方法,此后每隔10分钟再执行一次 public void clearLocalCache(){ } @Scheduled(cron = "0 0/10 * * * ?") public void keepDBConnectAlive(){ if (mainDataSource != null){ try { Class.forName(((HikariDataSource)mainDataSource).getDriverClassName()); int step = ((HikariDataSource)mainDataSource).getHikariPoolMXBean().getIdleConnections() - ((HikariDataSource)mainDataSource).getMinimumIdle()*2; while ((step--) > 0){ Connection connection = ((HikariDataSource)mainDataSource).getConnection(); ((HikariDataSource)mainDataSource).evictConnection(connection); } } catch (Exception e) { e.printStackTrace(); } } if (secondDataSource != null){ try { Class.forName(((HikariDataSource)secondDataSource).getDriverClassName()); int step = ((HikariDataSource)secondDataSource).getHikariPoolMXBean().getIdleConnections() - ((HikariDataSource)secondDataSource).getMinimumIdle()*2; while ((step--) > 0){ Connection connection = ((HikariDataSource)secondDataSource).getConnection(); ((HikariDataSource)secondDataSource).evictConnection(connection); } } catch (Exception e) { e.printStackTrace(); } } } //TODO 每天整点的五分执行检查小时用水量是否对齐,检查时间范围为当前时间到昨天 @Scheduled(cron = "0 5 * * * *") // @Scheduled(cron = "0 0/1 * * * ?") public void executeTaskEveryHourAtTenMinutesRecordAll() { KprAimTapWaterBizFun.checkRecordAllData(); } //TODO 每天整点的十分执行检查小时用水量是否对齐,检查时间范围为当前时间到昨天 @Scheduled(cron = "0 10 * * * *") public void executeTaskEveryHourAtTenMinutesRecord() { KprAimTapWaterBizFun.checkRecordData(); } //TODO 每天整点的15分执行预测日数据 @Scheduled(cron = "0 15 * * * *") // @Scheduled(cron = "0 0/1 * * * ?") public void executeTbMWater() { KprAimWaterCollecationBizFun.insertYuceDataScheduled(); } //TODO 每天整点的16分执行预测日小时数据 @Scheduled(cron = "0 16 * * * *") public void executeTbMHourWater() { KprAimWaterCollecationBizFun.insertYuceHourDataScheduled(); } //TODO 启动时执行 测试方法 // @PostConstruct // public void initTest(){ // Timer timer = new Timer(); // // 创建定时器任务 // TimerTask timerTask = new TimerTask() { // @Override // public void run() { //// KprAimTapWaterBizFun.checkRecordAllData(); //// KprAimTapWaterBizFun.checkRecordData(); // KprAimWaterCollecationBizFun.insertYuceDataScheduled(); // } // }; // timer.schedule(timerTask, 5000); // // Timer timer2 = new Timer(); // TimerTask timerTask1 = new TimerTask() { // @Override // public void run() { // KprAimWaterCollecationBizFun.insertYuceHourDataScheduled(); // } // }; // timer2.schedule(timerTask1, 10000); // } //TODO 启动时执行一次 @PostConstruct public void initOneTapWater(){ Timer timer = new Timer(); // 创建定时器任务 TimerTask timerTask = new TimerTask() { @Override public void run() { KprAimTapWaterBizFun.initTapWaterData(); } }; timer.schedule(timerTask, 10000); // 10秒后执行一次 } @PostConstruct public void initWaterRecordAll(){ Timer timer = new Timer(); TimerTask timerTask1 = new TimerTask() { @Override public void run() { KprAimTapWaterBizFun.initWaterCollecationReacordAll(); } }; timer.schedule(timerTask1,11000);//11秒后执行一次 } }