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(); // 定时器销毁 } }