`

java项目 定时任务执行

阅读更多

在项目中经常会用到执行定时任务,下面的两种是我在做项目的时候用到的两种

(1)spring task

在spring.xml中beans xmlns添加

 

http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd

 

 

<task:scheduled-tasks>
    <task:scheduled ref="timeTaskServiceImpl" method="task" cron="0 * 19 * * ?"/>
</task:scheduled-tasks>

 timeTaskServiceImpl  为你要执行的类,cron来定义您执行时间

 

(2)java自带的类 ScheduledExecutorService

 

首先我们先建一个工具类commontimer

package com.wonder.Util;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * 通用定时任务
 */
public class CommonTimer {

    private final static ScheduledExecutorService scheduler;

    static {
        scheduler = Executors.newSingleThreadScheduledExecutor();
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                scheduler.shutdown();
            }
        });
    }

    private static CommonTimer instance = new CommonTimer();

    private CommonTimer() {
    }

    public static CommonTimer getInstance() {
        return instance;
    }

    /**
     * 创建并执行在给定延迟后启用的 ScheduledFuture
     *
     * @param command
     * @param delay   秒
     * @return
     */
    public ScheduledFuture<?> scheduleWithSeconds(Runnable command, long delay) {
        return scheduler.schedule(command, delay, TimeUnit.SECONDS);
    }

    /**
     * 创建并执行在给定延迟后启用的 ScheduledFuture
     *
     * @param command
     * @param delay   毫秒
     * @return
     */
    public ScheduledFuture<?> scheduleWithMilliSeconds(Runnable command, long delay) {
        return scheduler.schedule(command, delay, TimeUnit.MILLISECONDS);
    }

    /**
     * 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在
     * initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
     *
     * @param command
     * @param delay   秒
     * @param period  秒
     * @return
     */
    public ScheduledFuture<?> scheduleAtFixedRateWithSeconds(Runnable command, long delay, long period) {
        return scheduler.scheduleAtFixedRate(command, delay, period, TimeUnit.SECONDS);
    }

    /**
     * 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在
     * initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
     *
     * @param command
     * @param delay   毫秒
     * @param period  毫秒
     * @return
     */
    public ScheduledFuture<?> scheduleAtFixedRateWithMilliSeconds(Runnable command, long delay, long period) {
        return scheduler.scheduleAtFixedRate(command, delay, period, TimeUnit.MILLISECONDS);

    }
}

 

里面封装了几个定时执行的方法

然后建一个TimeTaskListener

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

/**
 * Created by Guozhijie on 2016/9/20.
*/
@Component("timeTaskListener")
public class TimeTaskListener implements ApplicationListener<ContextRefreshedEvent> {
  @Autowired
    TimeTaskService timeTaskService;

    @Override
    public   void onApplicationEvent(ContextRefreshedEvent e){
        CommonTimer.getInstance().scheduleAtFixedRateWithSeconds(timeTaskService,1,60*1);
    }
}

 实现了 spring的 applicationListener ,即为每次在启动项目的时候,在各个service类加载完成之后,开始执行

 

多说一句,applicationListener 这个类,很适合 在项目启动适合将一些缓存的数据加载出来

 

 

附:TimeTaskServiceImpl类 

 

package com.wonder.provider;

import com.wonder.exception.ServiceException;
import com.wonder.service.TimeTaskService;
import org.springframework.stereotype.Service;

/**
 * Created by Guozhijie on 2016/9/20.
 */
@Service
public class TimeTaskServiceImpl implements TimeTaskService, Runnable {
    public void task() throws ServiceException {
        try{
            System.out.println("***********************111111");
        }catch (Exception e){
            throw e;
        }

    }
    public void run(){
          task();
    }
}

 

 

分享到:
评论

相关推荐

    java定时任务,每天定时执行任务demo

    "java定时任务,每天定时执行任务demo"的标题表明我们将讨论如何在Java中设置一个每天自动执行的任务。 首先,让我们来看看核心的`java.util.Timer`类,它是Java标准库中的定时任务管理工具。`Timer`类提供了调度...

    java轻松实现—定时任务

    Java中的定时任务是软件开发中一个非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务,比如数据备份、日志清理、系统监控等。在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现...

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...

    java定时任务,每天定时执行任务

    ### Java定时任务实现:每天定时执行任务 #### 一、概述 在Java开发中,定时任务是非常常见的一种需求。例如,需要定期清理数据库中的过期数据、定时发送邮件通知等场景。本文将详细介绍如何利用Java内置的`Timer`...

    Java定时执行某个任务

    `Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于具体的应用场景和性能需求。在实际开发中,理解并熟练掌握这两种方法能帮助我们编写出...

    java 定时执行任务

    Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...

    java定时执行sql语句

    通过配置数据库连接信息和要执行的sql语句,可实现定时执行多个sql语句。 所要执行的语句只能是写死的,可支持sqlserver mysql oracle。 配置说明: config/sys.properties 中指定数据库类型及连接信息,执行间隔...

    java quartz 定时任务

    总结起来,这个项目利用Quartz库和Cron表达式,为Java应用程序提供了一种强大而灵活的定时任务解决方案。开发者可以根据需求定义Cron表达式,创建各种复杂的调度策略,确保任务在正确的时间执行。通过深入理解Quartz...

    java动态管理定时任务

    要实现"spring+quartz整合,动态管理定时任务",首先需要在项目中引入Spring和Quartz的相关依赖。在Maven或Gradle的pom.xml或build.gradle文件中添加对应库的依赖。然后,我们需要配置Spring的ApplicationContext,...

    Java定时执行任务的三种方法

    `java.util.Timer`类是最基础的定时任务工具,它允许我们创建一个Timer对象并安排任务执行。在创建Timer实例后,通过`schedule`方法可以设置定时任务。例如: ```java Timer timer = new Timer(); timer....

    java定时任务的实现方式

    Java定时任务的实现是软件开发中常见的需求,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    Java定时任务是应用程序中不可或缺的一部分,它允许程序在特定时间执行特定操作,无需用户干预。在JDK 1.3及以后的版本中,`java.util.Timer`类提供了基础的定时任务支持。不过,`Timer`类的功能相对有限,无法精确...

    java定时任务调度

    Java定时任务调度是Java开发中常见的一种功能,用于在特定时间执行特定的任务,例如数据同步、日志清理、报表生成等。在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring...

    java每天实现定点执行任务

    在Java编程环境中,实现每天定点...`java.util.Timer`和`ScheduledExecutorService`适合简单的定时任务,而Quartz更适合大型项目,需要更复杂的调度规则。在实际应用中,还需考虑线程安全、异常处理和资源关闭等问题。

    java定时任务quartz的基本实现

    Java定时任务在软件开发中扮演着重要角色,它允许开发者安排任务在特定时间执行,而无需持续监控。Quartz是Java领域中一个广泛使用的开源任务调度框架,它提供了丰富的功能来满足各种定时任务的需求。本篇文章将深入...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    java写定时任务,定时任务、定时器详细示例

    Java中的定时任务与定时器是实现自动化操作的关键技术之一,特别是在需要周期性执行某些功能的场景下,如数据同步、日志清理、定时发送邮件等。本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util....

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间...总之,Citic Scheduler作为一款Java定时任务管理框架,能够有效地提升项目中定时任务的管理水平,降低维护复杂性,是Java开发者值得考虑的工具之一。

    java定时执行多任务和quartz定时执行多任务

    Java定时执行多任务是软件开发中的常见需求,用于在特定时间点或按固定频率执行某项操作,例如数据同步、日志清理等。Java提供了一些内置的定时工具,如`java.util.Timer`和`java.util.concurrent....

Global site tag (gtag.js) - Google Analytics