Tag: scheduled tasks

为什么@Scheduled注释不适用于@Transaction注释。 春季启动

我有一个问题:为什么当我们使用@Scheduled和@Transaction注释方法时,事务不起作用? 我知道@Scheduled调用我的类而不是Spring创建的代理类,但无法理解这种行为。 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Transactional; @Service public class UserServiceImpl implements UserService { @Override @Scheduled(fixedRateString = “${somestring}”,initialDelayString = “${anotherstring}”) @Transactional public void doSomething() { } } 我有两个解决这个问题的方法: 从Scheduled方法调用代理。 实现ConcurrentTaskScheduler并将ScheduledMethodRunnable (即我的类)的对象替换为带有代理的ScheduledMethodRunnable对象。 但是这种解决方案非常不方便。 你能解释一下为什么@Scheduled这样吗? 谢谢!

跨TimeZone的Java Quartz-Scheduler

我的服务器在欧洲/罗马时区运行 – 这个是服务器上的默认tz,我需要根据用户的时区安排工作,因此,如果居住在Pacific / Honolulu时区的用户安排一个CronTrigger,每个人都会触发我发现这个解决方案的一天是晚上22点为他的地球区域: CronTrigger trigger = newTrigger() .withIdentity(“name”, “group”) .withSchedule( cronSchedule(“0 0 22 ? * *”).inTimeZone(TimeZone.getTimeZone(“Pacific/Honolulu”)) ) .startNow() .build(); 在我的服务器上,这项工作从第二天“我的”上午09:00开始 。 除了保持更新时区(即时区更新工具 )之外,还有一些特殊问题需要考虑吗? 如果我想为上一个作业定义.startAt()和.endAt(),这种日期是否正常? 使用此程序可以安全地使用夏令时吗? Calendar calTZStarts = new GregorianCalendar(TimeZone.getTimeZone(“Pacific/Honolulu”)); calTZStarts.set(2013, Calendar.JANUARY, 10); Calendar calTZEnds = new GregorianCalendar(TimeZone.getTimeZone(“Pacific/Honolulu”)); calTZEnds.set(2013, Calendar.JANUARY, 30); Calendar calStarts = Calendar.getInstance(); calStarts.set(Calendar.YEAR, calTZStarts.get(Calendar.YEAR)); calStarts.set(Calendar.MONTH, calTZStarts.get(Calendar.MONTH)); calStarts.set(Calendar.DAY_OF_MONTH, calTZStarts.get(Calendar.DAY_OF_MONTH)); calStarts.set(Calendar.HOUR_OF_DAY, calTZStarts.get(Calendar.HOUR_OF_DAY)); […]

Spring @Scheduled任务运行两次

我正在创建一个@Scheduled任务,每5秒运行一次。 由于其他问题一直存在问题,我的任务是运行两次! 我已经查看了其他问题,并在此阅读了适用的文档,但我无法弄清楚问题所在。 我知道当我启动tomcat服务器时,我的@Scheduled类的两个单独实例正在实例化。 我还想到了它们在引用我的日志文件时被实例化的时候。 与此日志行相关联的一个: 信息:初始化Spring根WebApplicationContext 另一个有这个日志行: 信息:初始化Spring FrameworkServlet’servlet’ 这是spring配置文件。 而我的简单java类: package scheduled; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class Notifier { @Scheduled(fixedDelay = 5000) public void notifyUsersOfBidItems() { try { System.out.println(this); } catch (Exception e) { e.printStackTrace(); } } } 另外,我使用的是Spring 4。 编辑: Adding web.xml Archetype Created Web Application servlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring_config.xml […]

如何在特定时间安排任务?

我有一个java调度程序的问题,我的实际需要是我必须在特定时间启动我的进程,我会在某个时间停止,我可以在特定时间启动我的进程但我不能在某个时间停止我的进程,如何指定进程在调度程序中运行多长时间(这里我不会放入),任何人都有建议。 import java.util.Timer; import java.util.TimerTask; import java.text.SimpleDateFormat; import java.util.*; public class Timer { public static void main(String[] args) throws Exception { Date timeToRun = new Date(System.currentTimeMillis()); System.out.println(timeToRun); Timer timer1 = new Timer(); timer1.schedule(new TimerTask() { public void run() { //here i call another method } } }, timeToRun);//her i specify my start time } }

Spring调度任务 – 只运行一次

是否可以在指定的时间仅安排一次Spring服务方法? 例如,当前时间是下午2点,但是当我点击操作按钮时,我希望我的服务方法在晚上8点开始。 我熟悉@Scheduled注释,我不知道如何编写cron表达式而不是定期运行。 这个@Scheduled(cron = “0 0 20 * * ?”)每天晚上8点开火。 有什么建议么?

如何中断或停止当前运行的石英作业?

我有一些在Java Quartz Jobs的帮助下执行的任务,但我需要在我的代码中通过某些条件来停止某些任务。 我读到这可以通过InterruptableJob完成。 但我不明白我该怎么做呢?

如何在运行时更改Spring的@Scheduled fixedDelay

我需要以固定的间隔运行批处理作业,并且能够在运行时更改此批处理作业的时间。 为此,我遇到了Spring框架下提供的@Scheduled注释。 但我不确定如何在运行时更改fixedDelay的值。 我做了一些谷歌搜索但没有找到任何有用的东西。

Quartz Java恢复工作多次使用它

对于我的应用程序,我创建作业并使用CronTriggers安排它们。 每个作业只有一个触发器,作业名称和触发器名称都相同。 没有工作共享触发器。 现在当我创建像这样的“0/1 * * * *?”的cron触发器时 它指示作业每秒执行一次,它运行得很好。 当我第一次暂停工作时,问题就出现了: scheduler.pauseJob(jobName, jobGroup); 然后让我们说50秒后恢复工作: scheduler.resumeJob(jobName, jobGroup); 我所看到的是,在这50秒内,作业没有按要求执行。 但是当我恢复工作的那一刻,我同时看到了50份执行工作! 我认为这是由于失火指令的默认设置,但即使在创建时将触发器的失火指示设置为: trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING); 同样的事情发生了。 任何人都可以建议一种解决方法吗?

如何停止使用@Scheduled注释启动的计划任务?

我使用Spring Framework的@Scheduled注释创建了一个简单的计划任务。 @Scheduled(fixedRate = 2000) public void doSomething() {} 现在我想在不再需要时停止这项任务。 我知道在这个方法的开头可以有一个替代方法来检查一个条件标志,但是这不会停止执行这个方法。 是否有Spring提供什么来阻止@Scheduled任务?

如何使用Timer类调用方法,执行某些操作,重置计时器,重复?

我是一名Java初学者,并且已经为这个问题提供了各种解决方案,并且让我自己有点打结。 我已经尝试过使用Threads,然后发现了这个Timer类,并且到目前为止还没有成功。 如果您可以使用main方法发布可执行代码,那么我可以看到它正常工作并从那里开始玩,那将是很棒的。 启动计划 调用doSomething() 生成随机数并设置那么长的Timer。 当Timer关闭时,再次调用doSomething() 。 可能使用这个: http : //docs.oracle.com/javase/6/docs/api/java/util/Timer.html