1. java配置定时任务

我们可以使用Timer和TimerTask类在java中实现定时任务,详细说明如下:

1、基础知识java.util.Timer一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。java.util.TimerTask由 Timer 安排为一次执行或重复执行的任务。

2、示例代码该示例实现这样一个功能,在系统运行期间,每30分钟,系统自动检查连接池中的可用连接数,并输出到日志中。首先创建一个需要定时执行的任务类,这个任务类需要继承TimerTask,然后重写run()方法,run()方法体中的代码就是定时需要执行的操作,在本demo中,就是获取连接池中当前可用连接数,并输出到日志中,具体实现代码如下:public class TaskAvailableConnectNumber extends TimerTask { private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class); private ConnectionPool pool=ConnectionPool.getInstance(); @Override publicvoid run() { log.debug("当前连接池中可用连接数"+pool.getAvailableConnectNumber()); }}下面定义一个监听器,负责在应用服务器启动时打开定时器,监听器需要实现ServletContextListener接口,并重写其中的contextInitialized()和contextDestroyed()方法,代码如下:public class OnLineListener implements ServletContextListener{ private Logger log = Logger.getLogger(OnLineListener.class); Timer timer = null; //在应用服务器启动时,会执行该方法 publicvoid contextInitialized(ServletContextEvent arg0) { //创建一个定时器,用于安排需要定时执行的任务。 timer = new Timer(); //为定时器安排需要定时执行的任务,该任务就是前面创建的任务类TaskAvailableConnectNumber,并指定该任务每30分钟执行一次。 timer.schedule(new TaskAvailableConnectNumber(), 0, 30*60*1000); log.debug("启动定时器"); } //应用服务器关闭时,会执行该方法,完成关闭定时器的操作。public void contextDestroyed(ServletContextEvent arg0) { if(timer!=null){ timer.cancel();//关闭定时器 log.debug("-----定时器销毁--------"); } }}监听器要想正常运行,需要在web.xml文件中进行配置,配置信息如下:<!-- 监听器配置开始 --> <listener> <listener-class> cn.sdfi.listen.OnLineListener </listener-class> </listener><!-- 监听器配置结束 -->以上步骤完成后,一个简单的定时器就算开发完成了。

2. Java中定时任务

JobDetail实例是通过JobBuilder类创建的

3. java定时任务调度

用redis分布式锁就可以搞定,因为redis对于集群是共享的

4. java可配置定时任务

<bean id="simpleTrigger" >

<!-- see the example of method invoking job above -->

<property name="jobDetail" ref="jobDetail" />

<!-- 0 seconds -->

<property name="startDelay" value="0" />

<!-- repeat every 5400 seconds -->

<property name="repeatInterval" value="5400000" /> </bean>

5. java定时任务管理

crontab 需要由root用户部署,逗su - " 切换到root;

地crontab -e" 进入crontab 编辑状态;

输入" * * * * * /usr/bin/bash /home/ganlin/ganlin.sh", 这代表每秒执行一次脚本。

部署完成后 输入 地crontab -l" 查看crontab 中所有部署的内容;

脚本最好不要放在/home目录下,可以在脚本中写入一行标准输出用来在部署完成后测试结果用。

逗> /dev/null 2>&1逗 这样写得结果是就看不到标准输出了, /dev/null 代表一个虚拟的设备 把标准输出写到一个不存在的设备中去了。

6. java 定时任务

spring boot定时任务一共有四种方法获取session。Timer: 这是java自带的java.util.Timer类,这个类运行你调度一个java.util.TimerTask任务。使用这种方式可以让程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。多线程并行处理定时任务,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行

ScheduledExecutorService: 也是jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,任务并发执行,互不影响

Spring Task: Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多所有的定时任务都在同一线程上串行,想要异步执行需要自己添加线程池

Quartz: 这是一个功能比较强大的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂