首页 > 后端开发 > 正文

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

2024-06-21 04:12:56 | 我爱编程网

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?很多朋友对这方面很关心,我爱编程网整理了相关文章,供大家参考,一起来看一下吧!

本文目录一览:

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

java定时器 每天凌晨 固定执行一个方法

二、如果是需要Tomcat启动就能执行,不需要main方法的定时器的话:

web.xml里面需要这么配置:

com.InitListener

第一个类:InitListener

package com.listener;

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/**

* 系统启动时的监听类 初始化系统数据

*

* @author jhoneder

*

*/

public class InitListener implements ServletContextListener {

public void contextDestroyed(ServletContextEvent arg0) {

// TODO Auto-generated method stub

// context销毁时,销毁初始化数据

}

public void contextInitialized(ServletContextEvent event) {

// TODO Auto-generated method stub

try {

goTimmer();

} catch (Exception e) {

System.out.println("失败:" + e.getMessage());

}

}

private void goTimer() {

Timer timmerTask = new Timer();

Calendar calEnviron = Calendar.getInstance();

// 每天的02:00.am开始执行

calEnviron.set(Calendar.HOUR_OF_DAY, 2);

calEnviron.set(Calendar.MINUTE, 00);

// date为制定时间

Date dateSetter = new Date();

dateSetter = calEnviron.getTime();

// nowDate为当前时间

Date nowDateSetter = new Date();

// 所得时间差为,距现在待触发时间的间隔

long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();

if (intervalEnviron < 0) {

calEnviron.add(Calendar.DAY_OF_MONTH, 1);

dateSetter = calEnviron.getTime();

intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();

}

// 每24小时执行一次

timmerTask.schedule(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);

}

}

第二个类:

package com.listener;

import java.util.Timer;

import java.util.TimerTask;

/**

* 被调用执行类

*

* @author Administrator

*

*/

public class UseTimer extends TimerTask {

Timer timer = new Timer();

public UseTimer(Timer timer) {

this.timer = timer;

}

/*

* 被调用具体的方法

*/

public void run() {

System.out.println("开始具体执行!");

}

}

不懂得话可以追问!

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class HandleTimerTask implements ServletContextListener {

private Timer timer = null; //定时器

private static int DOWNlOAD_HOUR = 0; //执行任务开始时间(时)

private static int DOWNlOAD_MINUTE = 0; //执行任务开始时间(分)

private static int DOWNlOAD_SECOND = 0; //执行任务开始时间(秒)

private long delay; //延时时间值(当前系统时间到下载时间之间的时间差毫秒数)

public void contextInitialized(ServletContextEvent event) {

init();//初始化参数

timer = new Timer(true);//创建Timer对象

//定时执行程序

timer.schedule(new Handle(event.getServletContext()),delay,24*60*60*1000);//调用Handle()类(即每天要执行的任务),delay表示延迟毫秒数,0,24*60*60*1000表示每隔一天执行一次任务,60*60*1000表示一个小时;

}

public void contextDestroyed(ServletContextEvent event) {

timer.cancel();

}

/**

* 初始化参数

* @return

*/

public void init(){

//声明一个Calendar对象

Calendar cal = Calendar.getInstance();

//设置时间

cal.set(Calendar.HOUR_OF_DAY, DOWNlOAD_HOUR);

cal.set(Calendar.MINUTE, DOWNlOAD_MINUTE);

cal.set(Calendar.SECOND, DOWNlOAD_SECOND);

Date date = new Date();

//获取设定的时间

date = cal.getTime();

//声明当前时间

Date now = new Date();

//获取设定的时间和当前的时间差(毫秒数)

long interval = date.getTime() - now.getTime();

//如果当前时间大于下载时间,则将下载时间设置为下一个下载时间

if (interval < 0) {

cal.add(Calendar.DAY_OF_MONTH, 1);//将天数加1

date = cal.getTime();

//获取设定的时间和当前的时间差(毫秒数)

interval = date.getTime() - now.getTime();

}

this.startTime = date;//初始化开始下载时间

this.delay = interval;//初始化当前时间到下载时间之间的时间差

}

}

public class Handle extends TimerTask {

private ServletContext context = null;

Timer timer = null; //查询任务定时器

public Handle(ServletContext context)

{

this.context = context;

}

/**

* 开始执行

*/

public void run() {

//开始执行

context.log("开始执行!");

}

}

用延迟时间可以实现,添加了一个init()方法用来计算延时数,不管什么时候启动服务,都可以根据当前系统时间和执行任务的开始时间计算出延时时间毫秒数。

虽然没有分,还是希望能帮助你。 ^_^

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

java 定时任务的几种实现方式

JDK 自带的定时器实现

// schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行

// schedule(TimerTask task, Date time) 特定时间执行

public static void main(String[] args) {

for (int i = 0; i < 10; ++i) {

new Timer("timer - " + i).schedule(new TimerTask() {

@Override

public void run() {

println(Thread.currentThread().getName() + " run ");

}

}, 1000);

}

}

2. Quartz 定时器实现

//首先我们需要定义一个任务类,比如为MyJob02 ,

//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在

//这个方法中就是我们具体的任务执行的地方。

//由希望由调度程序执行的组件实现的接口

public class MyJob02 implements Job {

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

// TODO Auto-generated method stub

// 执行响应的任务.

System.out.println("HelloJob.execute,"+new Date());

}

}

public class QuartzTest5 {

public static void main(String[] args) throws Exception {

//SchedulerFactory 是一个接口,用于Scheduler的创建和管理

SchedulerFactory factory = new StdSchedulerFactory();

//从工厂里面拿到一个scheduler实例

//计划表(可能翻译的不太贴切),现在我们有了要做的内容,

//与调度程序交互的主要API

/*

* Scheduler的生命期,从SchedulerFactory创建它时开始,

到Scheduler调用shutdown()方法时结束;Scheduler被创建后,

可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作

(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,

才会真正地触发trigger(即执行job)

*/

Scheduler scheduler = factory.getScheduler();

//具体任务.

//用于定义作业的实例

//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。

JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

//Trigger(即触发器) - 定义执行给定作业的计划的组件

//TriggerBuilder - 用于定义/构建触发器实例

CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")

.withSchedule(CronScheduleBuilder.cronSchedule("0/1  * * * * ?")).build();

scheduler.scheduleJob(job, trigger);

scheduler.start();

}

3. Spring  boot 任务调度(这个非常容易实现)

/*

*  开启对定时任务的支持

*  在相应的方法上添加@Scheduled声明需要执行的定时任务。

*/

@EnableScheduling

//@EnableScheduling注解来开启对计划任务的支持

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

@Component

public class ScheduledTasks {

private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);

private    int     i=0;

//0 0 0 2 * ?

@Scheduled(cron="*  *  *  2  *  ?")

//@Scheduled 注解用于标注这个方法是一个定时任务的方法我爱编程网

public void testFixDelay() {

logger.info("执行方法"+i++);

}

以上就是我爱编程网为大家带来的JAVA单机版程序,如何指定在每天凌晨0:00:00执行?,希望能帮助到大家!

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“JAVA单机版程序,如何指定在每天凌晨0:00:00执行?”相关推荐
如何让java程序每天执行一次
如何让java程序每天执行一次

如何让java程序每天执行一次写一个定时器import java.util.Timer;  import java.util.TimerTask;    public class M {      public static void main(String[] args) {          // TODO todo.generated by zoer          Timer

2024-04-15 15:44:26
Java如何得到指定时间段中的所有周,及每周的每一天都是周几和日期是多少?
Java如何得到指定时间段中的所有周,及每周的每一天都是周几和日期是多少?

Java如何得到指定时间段中的所有周,及每周的每一天都是周几和日期是多少?importjava.text.DateFormatSymbols;importjava.util.Calendar;importjava.util.GregorianCalendar;publicclassTest{/***@paramargs*/publicstaticvoidmai

2024-04-12 02:36:21
如何在JAVA中每隔一段时间执行一段程序
如何在JAVA中每隔一段时间执行一段程序

简述Java程序从编写到运行的基本步骤,并说明Java的基本工作原理Java编译原理:Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。一.Java源文件的编译、下载、解释和执行Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译

2024-03-24 16:51:53
java 如何设定时间执行程序?
java 如何设定时间执行程序?

java如何设定时间执行程序?importjava.util.Calendar;\x0d\x0aimportjava.util.Date;\x0d\x0aimportjava.util.Timer;\x0d\x0aimportjava.util.TimerTask;\x0d\x0a\x0d\x0apublicclassTest{\x0d\x0apublicstaticvoidmain(Str

2024-03-18 12:42:35
linux执行java代码怎么指定参数
linux执行java代码怎么指定参数

linux运行java程序linux运行java怎么在linux中运行jar包?有以下几种方式:1、java-jarxxxxx.jar//当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出2、java-jarxxxxx.jar//当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。3、nohupJava-jarxxxxxx.jar//意

2024-04-13 00:38:12
如何在cmd下执行java程序?谢谢
如何在cmd下执行java程序?谢谢

如何在cmd下执行java程序?谢谢如图新建一个hello.java文件,写上你的代码。2.在文件的目录下打开cmd,输入命令javachello.java3.编译成功会生成hello.class文件4.运行编译好的文件,输入命令javachello(不需要文件后缀)。拓展:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里

2024-04-09 21:11:50
如何让java定时执行一个方法
如何让java定时执行一个方法

如何让java定时执行一个方法现在能想到的是三种方法能实现:1、普通thread实现:是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。2、timertask:启动和去取消任务时可以控制,第一次执行任务时可以指定你想要的delay时间。3、scheduledexecutorservice实现:最理想的定时任

2024-04-20 07:04:57
如何用java程序实现上传文件到指定的URL地址
如何用java程序实现上传文件到指定的URL地址

如何用java程序实现上传文件到指定的URL地址参考代码如下:importjava.io.*;/***复制文件夹或文件夹*/publicclassCopyDirectory{//源文件夹staticStringurl1="f:/photos";//目标文件夹staticStringurl2="d:/tempPhotos";publicstaticv

2024-04-07 04:15:03