`
ynshun
  • 浏览: 91828 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

java定时器实现实时访问数据库以免数据库链接超时

 
阅读更多
import java.util.TimerTask;

import java.sql.*;

/**
 * 
 * @desc <p>
 * 			访问数据库的任务
 *       </p>
 * @author ynshun
 * @e_mail:ynshun@163.com
 * @version 1.0
 * @date 2013-8-1 13:47:14
 */
public class ConnDBTask extends TimerTask {
	private static boolean isRunning = false;

	String driver = "com.mysql.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/qhwxcs_djy";
	String userName = "root";
	String passWord = "1";

	public void run() {

		if (!isRunning) {
			isRunning = true;
			System.out.println("开始执行任务..."); // 开始任务
			try {
				Class.forName(driver);
				Connection conn;
				try {
					conn = DriverManager.getConnection(url, userName, passWord);
					if (!conn.isClosed())
						System.out.println("Succeeded connecting to the Database!");
					Statement statement = conn.createStatement();
					String sql = "select * from t_user";
					ResultSet rs = statement.executeQuery(sql);
					if (rs.next()) {
						System.out.println("List<User> is not null!");
					}
					rs.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			System.out.println("执行任务完成..."); // 任务完成
			isRunning = false;
		} else {
			System.out.println("上一次任务执行还未结束..."); // 上一次任务执行还未结束
		}
	}
}

 

 

 

import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * @desc <p> 
 *			定时访问数据库以防止数据库连接超时
 * 		</p>
 * @author ynshun
 * @e_mail:ynshun@163.com
 * @version 1.0
 * @date 2013-8-1 14:12:41
 */
@WebListener
public class TimeManager implements ServletContextListener {
	public static final long NO_DELAY = 0; // 无延迟
	private Timer timer; // 定时器

	/**
	 * 在Web应用启动时初始化任务
	 */
	@Override
	public void contextInitialized(ServletContextEvent event) {
		timer = new Timer("访问数据库", true); // 定义定时器
		timer.schedule(new ConnDBTask(), NO_DELAY, 14400000); // 启动备份任务,每4个小时执行一次
	}

	/**
	 * 在Web应用结束时停止任务
	 */
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel(); // 定时器销毁
	}
}

 

 

 

分享到:
评论

相关推荐

    java 定时器

    - 尽量避免在`TimerTask`中进行耗时的操作,如I/O或数据库访问,这些操作可能导致任务超时,影响定时器的准确性。 - 当不再需要定时器时,记得取消所有任务并关闭定时器,以防止资源泄漏。 在实际应用中,Java 5...

    Java中数据库连接池原理机制的详细讲解

    ### Java中数据库连接池原理机制的详细讲解 #### 一、引言 在现代软件开发中,特别是基于Java的企业级应用开发中,数据库连接管理是一个关键环节。由于数据库连接是昂贵的资源,频繁地创建与关闭连接将严重影响系统...

    java_Timer定时器实例_Spring实例

    标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...

    java定时器

    Java定时器,全称为Java Timer类,是Java.util包下的一个关键组件,主要用于安排在未来某个时间点或周期性地执行任务。它为Java应用程序提供了定时调度功能,使得开发者可以安排任务在特定的时间点运行,或者按照...

    java_Timer_thread.rar_java thread timer_java timer_java 定时器_java

    - 定期检查数据库连接是否超时。 - 定时清理缓存。 - 定时发送邮件或通知。 - 定时刷新UI或其他状态。 总结,Java中的`Timer`和`TimerTask`是用于实现定时任务的基本工具,虽然它们在多线程编程中有一定的局限...

    java定时器大全

    首先,Java定时器主要通过`java.util.Timer`类和`java.util.TimerTask`类来实现。`Timer`类负责调度任务,而`TimerTask`则表示要执行的任务。创建一个`Timer`实例后,可以使用`schedule()`或`scheduleAtFixedRate()`...

    定时器技术应用2.zip

    硬件定时器是由CPU外部的计数器硬件实现的,它们直接与系统的时钟脉冲相连,精度高且独立于CPU运行,常用于实时操作系统和嵌入式系统中。软件定时器则是由软件模拟实现,依赖于操作系统调度,灵活性较高,但精确度...

    定时连接池

    5. **连接池配置**:用户可以根据系统需求灵活调整连接池参数,如最小连接数、最大连接数、初始化连接数、超时时间等,以实现最佳性能和资源利用。 6. **线程安全**:C3P0设计为线程安全,可以在多线程环境下安全地...

    定时器试验.zip

    在"定时器试验.zip"这个压缩包中,可能包含的文件可能有代码示例、测试脚本、实验报告或者教学资料,它们可能涵盖了多种编程语言(如Java, Python, C++等)的定时器实现,以及不同类型的定时器对比和使用技巧。...

    Java实现网页抓取

    Java的定时器或者异步任务调度库(如ScheduledExecutorService)可以实现这一功能。 8. **IP代理**:为了防止被目标网站封禁,可以使用代理IP进行抓取。Java中可以通过第三方库如proxy-vole来管理和切换IP。 9. **...

    数据库驱动c3p0

    3. **空闲连接检测**:可以设置定时器检查并回收长时间未使用的空闲连接,防止数据库因过多的空闲连接而资源耗尽。 4. **连接池大小**:你可以自定义最小和最大连接数,以适应应用的负载需求。 5. **并发控制**:...

    Java数据库连接池之c3p0简介_动力节点Java学院整理

    Java数据库连接池是提高应用程序与数据库交互效率的关键技术之一,其中c3p0是一个开源的连接池实现。c3p0由Mchange公司开发,它的设计目标是提供一个轻量级、高效且易于使用的数据库连接池,使得开发者能够更方便地...

    基于Linux的web服务器

    项目是在Linux下以C++开发语言...使用升序双向链表实现定时器,关闭超时的非活动连接。 4.单例模式的日志系统,实现异步写入功能,记录服务器状态。 5.使用单例模式和RAII机制实现数据库连接池,减少数据库连接的开销

    java控制页面刷新频率

    本文将深入探讨如何利用Java来实现这一功能,并通过一段示例代码来具体说明其实现机制。 ### Java控制页面刷新频率 在Web应用中,页面的自动刷新通常涉及到对服务器时间的跟踪以及与客户端交互的管理。Java作为一...

    基于java web的在线考试系统源码.zip

    考试过程中的计时功能则需要定时器任务,如使用Java的ScheduledExecutorService或者Quartz等调度框架,定期检查考试时间,防止超时。 最后,成绩计算和结果显示也是系统的重要组成部分。源码中会有对用户答题情况...

    一种基于Java企业内部及时通讯软件设计.doc

    尽管如此,该软件通过在应用层实现确认与重传机制,以及动态超时重传定时器,确保了数据的可靠性。同时,为了避免IP层分片带来的低效率,软件在应用层进行了数据分片。 **关键知识点4:Derby数据库** Derby是一款...

    简单的java爬虫程序

    这可以通过计时器、定时器或者线程睡眠来实现。 8. **反爬虫策略** 有些网站会有反爬虫措施,如验证码、IP限制等。理解这些策略并设计对策,如使用代理IP池、模拟浏览器行为,可以提高爬虫的生存能力。 9. **...

    基于SpringBoot实现的刷脸支付商品购买项目源码(购物闭环)+数据库+项目详细说明.7z

    基于SpringBoot实现的刷脸支付商品购买项目源码(购物闭环)+数据库+项目详细说明.7z 实现刷脸支付的商品购买项目 完成商品购物闭环 刷脸前端界面UI设计 【页面按钮】 页面01-课程商品页面:按钮:①刷脸支付、②我的...

    Redis面试专题及答案(下).pdf

    Redis的过期策略主要包含定时过期和惰性过期,定时过期是为每个设置了过期时间的key创建一个定时器,而惰性过期则是在key被访问时才判断是否过期,如果过期则清除。 LRU(Least Recently Used)算法是一种常用缓存...

Global site tag (gtag.js) - Google Analytics