IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 读取外部文件获取定时任务cron,开启多线程定时任务 -> 正文阅读

[Java知识库]读取外部文件获取定时任务cron,开启多线程定时任务

读取外部文件cron

package com.psbc.sendbatchfile.scheduletask;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class CronConfiger {
	
	private  Properties config ;
	
	private String FILE_NAME = "hw_cron_one.properties";
	
	private static CronConfiger instance;
	
	private CronConfiger(String fileName){
		
		this.config = new Properties();
		if(fileName != null){
			this.FILE_NAME = fileName;
			InputStream in = null;
			try {
				String configDir = System.getProperty("PTX_HOME");
				configDir = "C:\\Users\\swhewenjie\\Desktop\\conf\\one";
				String configFile = configDir + File.separatorChar +"config"+File.separatorChar +this.FILE_NAME;
				File f = new File(configFile);
				if(!f.exists()){
					System.out.println("can not find file :" +configFile);
//					in = ClassLoader.getSystemResourceAsStream(configFile);
					in = this.getClass().getClassLoader().getResourceAsStream(this.FILE_NAME);
				} else {
					System.out.println("load config file :" +configFile);
					in = new FileInputStream(configFile);
				}
				
				this.config.load(in);
			} catch (IOException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(in != null){
					try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	
	public static CronConfiger getInstance(){
		
//		if(instance == null){
//			instance= new DCConfiger("dc_conf.properties");
//		}
		
		instance= new CronConfiger("hw_cron_one.properties");
		
		return instance;
	}
	
	public static String getStrValue(String name,String def){
		
		return getInstance().getProperty(name, def);
		
	}
	
	public static int getIntValue(String name,int def){
		
		String val = getStrValue(name,def+"");
		int ret = def;
		try{
			ret = Integer.valueOf(val);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return ret;
	}
	
	
	public String getProperty(String name,String def){
		
		return this.config.getProperty(name, def);
		
	}
	
	public void setProperty(String name,String value){
		
		this.config.put(name, value);
		
	}
		

}

读取外部文件还有其他形式

定时任务的开启和删除和修改

package com.psbc.sendbatchfile.scheduletask;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.CronTask;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.stereotype.Component;
import com.psbc.sendbatchfile.service.DayAllHdoopService;
import com.psbc.sendbatchfile.service.SysSendSchemadbService;
import com.psbc.sendbatchfile.service.YesterdayDateService;

import lombok.extern.slf4j.Slf4j;

@Component
@Configurable
@EnableScheduling
@Slf4j
public class ScheduledTask implements SchedulingConfigurer {
	private volatile ScheduledTaskRegistrar registrar;
	private final ConcurrentHashMap<Integer, ScheduledFuture<?>> scheduledFutures = new ConcurrentHashMap<Integer, ScheduledFuture<?>>();
	private final ConcurrentHashMap<Integer, CronTask> cronTasks = new ConcurrentHashMap<Integer, CronTask>();

	@Autowired
	private DayAllHdoopService dayAllHdoopService;
	
	@Autowired
	private SysSendSchemadbService sysSendSchemadbService ;
	
	@Autowired
	private YesterdayDateService yesterdayDateService;
	

	@Override
	public void configureTasks(ScheduledTaskRegistrar registrar) {
		// TODO 自动生成的方法存根
		// 设置30个线程,默认是单线程
		registrar.setScheduler(Executors.newScheduledThreadPool(30));
		this.registrar = registrar;
	}

	/**
	 * 刷新任务
	 */
	public void refresh() {
		Map<Integer, String> map = new LinkedHashMap<>();
		// 取消已经删除的策略任务
		Set<Integer> sids = scheduledFutures.keySet();
		String dayallhdoop = CronConfiger.getStrValue("hwCron_dayallhdoop_one", null);
		if (dayallhdoop!=null&&!"".equals(dayallhdoop)) {
			map.put(1, dayallhdoop);
		}
		String syssendschemadb = CronConfiger.getStrValue("hwCron_syssendschemadb_one", null);
		if (syssendschemadb!=null&&!"".equals(syssendschemadb)) {
			map.put(2, syssendschemadb);
		}
		String yesterdaydate = CronConfiger.getStrValue("hwCron_yesterdaydate_one", null);
		if (yesterdaydate!=null&&!"".equals(yesterdaydate)) {
			map.put(3, yesterdaydate);
		}
		for (Integer sid : sids) {
			if (!exists(map, sid)) {
				if (sid==1) {
					log.debug("删除定时任务—— 一期日全量数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
				}else if(sid==2){
					log.debug("删除定时任务—— 一期数据管控元数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
				}else if(sid==3){
					log.debug("删除定时任务——  一期日增量数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
				};
				scheduledFutures.get(sid).cancel(false);
			}
		}
		if (map != null) {
			for (Map.Entry<Integer, String> entry : map.entrySet()) {
				String expression = entry.getValue();// cron表达式
				Integer sid = entry.getKey();// 每个的id
				// 计划任务表达式为空则跳过
				if (StringUtils.isEmpty(expression)) {
					continue;
				}
				// 计划任务已存在并且表达式未发生变化则跳过
				if (scheduledFutures.containsKey(sid) && cronTasks.get(sid).getExpression().equals(expression)) {
					continue;
				}
				// 如果策略执行时间发生了变化,则取消当前策略的让你无
				if (scheduledFutures.containsKey(sid)) {
					scheduledFutures.get(sid).cancel(false);
					scheduledFutures.remove(sid);
					cronTasks.remove(sid);
				}
				CronTask task = new CronTask(new Runnable() {

					@Override
					public void run() {
						// TODO 自动生成的方法存根
						// 每个执行任务实际需要执行的具体业务逻辑
						if (sid==1) {
							log.debug("开始执行定时任务—— 一期日全量数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
							dayAllHdoopService.dayAllHdoop();
						}else if(sid==2){
							log.debug("开始执行定时任务—— 一期数据管控元数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
							sysSendSchemadbService.sysSendSchemadb();
						}else if(sid==3){
							log.debug("开始执行定时任务——  一期日增量数据,时间:{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
							yesterdayDateService.yesterdayDate();
						};
					}
				}, expression);
				ScheduledFuture<?> future = registrar.getScheduler().schedule(task.getRunnable(), task.getTrigger());
				cronTasks.put(sid, task);
				scheduledFutures.put(sid, future);
				if (sid==1) {
					log.debug("即将开始定时任务—— 一期日全量数据,cron:{}",expression);
				}else if(sid==2){
					log.debug("即将开始定时任务—— 一期数据管控元数据,cron:{}",expression);
				}else if(sid==3){
					log.debug("即将开始定时任务——  一期日增量数据,cron:{}",expression);
				};
			}
		}

	}

	private boolean exists(Map<Integer, String> map, Integer tid) {
		Set<Integer> keySet = map.keySet();
		for (Integer i : keySet) {
			if (i == tid) {
				return true;
			}
		}
		return false;
	}

}

项目启动自动初始化

package com.psbc.sendbatchfile.scheduletask;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner{
	@Autowired
	private ScheduledTask scheduledTask;
	@Override
	public void run(ApplicationArguments args) throws Exception {
		// TODO 自动生成的方法存根
		log.debug("自动刷新定时任务---开始");
		scheduledTask.refresh();
		log.debug("自动刷新定时任务--结束");
	}

}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 21:56:42  更:2022-03-17 21:59:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:20:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码