`

前面博客{定时JOB,去请求数据,并找出最新数据持久化}的问题

 
阅读更多

之前的博客   定时JOB,去请求数据,并找出最新数据持久化  ,代码是有问题的、不够严谨的。

 

存在两个问题:1、HttpClient 是new出来的,这样会导致oom的,比如spring mvc 就是单例的(他的线程安全问题暂不提)。2、job执行时间大于间隔时间的问题,当执行时间 大于 间隔时间, JOB会默认启新线程来执行JOB,这样也会有线程问题,我这里的共享变量是最大时间,会有线程安全问题的。如果我不同步,只有用其他方法。

 

解决:1、把HttpClient  全部改为静态方法。2、不采用同步,简单的在JOB上加@DisallowConcurrentExecution,用于阻止并发。

 

代码:

 

//阻止并发,防止maxBjsj混乱
@DisallowConcurrentExecution
public class AlarmJob implements Job {
	
	
	
	public static  AtomicReference<Date>  maxBjsj  ;
	
	static{
		if(CacheUtils.get(Contants.jq_maxDateCache, Contants.jq_maxDate_key) == null){
			maxBjsj = new  AtomicReference<Date>();
		}else{
			maxBjsj = (AtomicReference<Date>)CacheUtils.get(Contants.jq_maxDateCache, Contants.jq_maxDate_key);
		}
	}
	
	public static int count = 0;
	
	//可以缓存到内存
//	@Cacheable(value="sysCache" )
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {

		String url = Contants.alarm_url+DateUtils.getDate("yyyyMMdd");
		
		try {
			 long t1 = System.currentTimeMillis(); // 排序前取得当前时间  
			 
			if(HttpClient.get(url,maxBjsj,Contants.TYPE_JQ)){
//				if(new HttpClient().get(url,maxBjsj,Contants.TYPE_JQ)){
				
				 long t2 = System.currentTimeMillis(); // 排序后取得当前时间  
				  Calendar c = Calendar.getInstance();  
			        c.setTimeInMillis(t2 - t1);  
			        System.out.println("----第"+ ++count +"次 同步结束----"+"耗时: " + c.get(Calendar.MINUTE) + "分 "  
		                + c.get(Calendar.SECOND) + "秒 " + c.get(Calendar.MILLISECOND)  
		                + " 毫秒");
			}
//		
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}

	
}

 

 

refs: http://www.cnblogs.com/wynn0123/archive/2015/07/14/4646206.html

        http://blog.csdn.net/pdw2009/article/details/50195639

0
0
分享到:
评论

相关推荐

    quartz job持久化

    实现把job持久化数据库,里面有具体的说明文档 Quartz 1 1 通过quartz创建持久化定时执行任务 3 1.1 首先创建一个基本的web工程,所需jar包 3 1.2 Quartz配置文件quartz.properties 4 1.3 创建job 6 1.3.1 实现org....

    Quartz定时任务持久化数据表

    在Java应用中,Quartz常被用来实现后台任务的自动化,比如定时发送邮件、数据备份等。在分布式环境中,Quartz还支持集群,确保任务的高可用性。 Quartz的定时任务持久化是指将任务的相关信息(如触发器、作业详情)...

    爬取51job数据并做可视化分析(可视化大屏项目)

    该项目是关于利用Python进行网络爬虫,从51job网站获取相关数据,然后通过Echarts进行数据可视化,并最终构建一个基于Web的可视化大屏展示。在这个过程中,涉及到的关键技术包括Python爬虫、数据库管理(MySQL)、...

    python基于51job数据可视化图表展示源码.zip

    python基于51job数据可视化图表展示源码,基于51job工作招聘数据可视化图表展示 web 数据挖掘,ECharts可视化。python基于51job数据可视化图表展示源码,基于51job工作招聘数据可视化图表展示 web 数据挖掘,ECharts...

    Python爬取分析51Job数据并可视化岗位信息

    在本项目中,我们主要探讨如何使用Python编程语言来实现对51Job网站的网络爬虫,以获取相关的职位信息,包括工作名称、工作描述、公司名称以及薪资范围等,并进一步进行数据分析和可视化。以下是对整个过程的详细...

    springboot2.3集成quartz定时任务持久化数据库,支持集群

    在本文中,我们将深入探讨如何在Spring Boot 2.3版本中集成Quartz定时任务,并实现其持久化到数据库,以便支持集群环境。这个过程的关键在于配置Quartz Scheduler,设置数据库连接,以及确保任务在多节点环境中能够...

    定时调度器 xxl-job

    6. **应用场景**:xxl-job广泛应用于大数据处理、报表生成、数据同步、定时备份等多种定时任务场景。 总结来说,xxl-job是一个强大且灵活的分布式任务调度框架,它简化了定时任务的开发和管理,同时具备高可用、可...

    quartz的持久化

    总的来说,理解并正确配置 Quartz 的持久化机制对于确保定时任务的可靠性和可维护性至关重要。开发者需要根据项目需求和现有的数据存储方案选择合适的 JobStore 实现,并确保正确地执行相关的初始化和维护操作。

    oracle定时删除表空间的数据并释放表空间

    "Oracle定时删除表空间的数据并释放表空间" Oracle数据库定时删除表空间的数据并释放表空间是通过创建存储过程和定时任务来实现的。下面详细讲解该知识点: 一、创建存储过程 首先,需要创建一个存储过程来删除...

    quartz 持久化数据库表结构sql

    本篇将详细介绍Quartz如何实现数据库持久化,并提供各类型数据库的SQL创建语句。 Quartz的持久化机制依赖于一组特定的数据库表,这些表存储了Job(任务)和Trigger(触发器)的信息。以下是Quartz默认使用的数据库...

    spring的quartz定时任务相关(持久化任务)

    ### Spring中的Quartz定时任务与持久化管理 #### 一、Spring与Quartz简介 Spring框架作为Java领域中广泛使用的轻量级应用框架之一,它提供了丰富的功能支持,包括依赖注入、面向切面编程以及MVC框架等。而Quartz是...

    SSM整合quartzb并持久化到数据库实现动态增删改查

    下面将详细介绍如何将这三个组件与Quartz整合,并将定时任务的配置和状态持久化到数据库,实现动态的增删改查功能。 1. **Spring配置** 在Spring的配置文件中,我们需要引入Quartz的相关依赖。首先,定义一个`...

    基于python的51job工作岗位数据分析与可视化-交互式数据可视化期末作业项目.zip

    数据源:基于51job招聘网站爬取的数据 51job招聘网 二、数据分析目标 全国各省的平均月薪情况、岗位分别情况 学历需求情况 工作经验与岗位数量相关情况 福利待遇情况 相关岗位描述 三、数据价值 1.有相关岗位需求的...

    Oracle 定时删除数据 并释放空间

    Oracle 定时删除数据 并释放空间 ,创建存储过程并使用job完成。

    Quartz持久化资料大全

    在实际应用中,Quartz的持久化经常与Spring框架结合,通过Spring的数据源(dataSource)来实现任务的存储和恢复。 一、Quartz持久化的意义 1. 任务恢复:当系统发生故障或重启时,能够恢复之前设置的任务,保证任务...

    oracle的job定时

    Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...

    Quartz.net 3.0.7.0数据库持久化.rar

    这个压缩包“Quartz.net 3.0.7.0数据库持久化.rar”包含了关于如何使用Quartz.NET实现任务调度的数据库持久化和集群配置的资料。Quartz.NET 3.0.7.0是该库的一个稳定版本,它提供了许多改进和新特性。 **数据库持久...

    爬取51job网站实现数据可视化实验报告书.doc

    《爬取51job网站实现数据可视化实验报告书》 本实验报告主要涉及计算机科学与技术领域的数据获取、预处理及可视化技术,适用于计算机、软件工程、通信工程等相关专业的大学生进行课程设计或毕业设计参考。实验的...

    Talend Job - Windows 版本定时任务 简单操作 希望能帮助各位同是初学者的人们

    在数据处理领域,定时任务常用于定期从源系统中抽取数据并将其加载到目标系统中,确保数据的实时性和准确性。 #### 三、准备工作 在开始配置定时任务之前,我们需要做一些基础性的准备工作: 1. **安装Talend ...

Global site tag (gtag.js) - Google Analytics