问题标签 [spring-scheduled]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
7129 浏览

hibernate - Spring4 @Scheduled @Transaction 在刷新时为多个数据源抛出没有正在进行的事务

我的服务(使用主数据源的jobExecutor)在从spring MVC控制器调用时工作正常,但是从调度方法调用时总是抛出“TransactionRequiredException:没有正在进行的事务”。原因看起来从 scheduleThreadPool 绑定到线程的 jdbcTransaction 具有 NOT_ACTIVE 作为 localStatus。该事务是针对主数据源的,默认情况下开始于 DataSourceTransactionManager。

我正在使用 spring-boot、spring-data 和 hibernate,以下是这些版本

弹簧启动:1.2.7.RELEASE

休眠核心:4.3.11.Final

休眠实体管理器:4.3.11.Final

也使用java配置

服务器配置.java

MyScheduler.java

服务层

JobExecutorImpl.java

内部数据源的 Spring Data JPA 存储库

JobInstanceRepository.java

外部数据源的配置。这使用 JpaTransactionManager 并命名为 adapterTransactionManager。外部数据源的存储库看起来工作正常

ExternalRepositoryConfig.java

下面是从调度方法调用服务时的 stackTrace

当我调试时,我可以看到 jdbcTransaction 的 localStatus 是 NOT_ACTIVE 并且下面的休眠方法抛出异常

AbstractEntityManagerImpl.java

我们有两个数据源,一个供内部使用,另一个供外部使用

应用程序属性

0 投票
1 回答
3833 浏览

spring - 春季启动计划任务挂起

我一直在使用带有@Scheduled 的spring boot 一段时间,但最近我发现有一个危险的潜在威胁,如下所述:我发现当应用程序运行和计划任务运行多次时,有许多线程仍在等待但未完成,这在线程堆栈跟踪中由“kill -3”显示。为了清除任何可能导致这个问题的东西,我做了一个完全虚拟的任务:

这是我的日志:

20151102 11:54:50.660 | 信息 | 池 3 线程 2 | ---------------[26] | TestJob.test(TestJob.java:19) 20151102 11:55:50.662 | 信息 | 池 3 线程 4 | ---------------[28] | TestJob.test(TestJob.java:19) 20151102 11:56:50.664 | 信息 | 池 3 线程 5 | ---------------[33] | TestJob.test(TestJob.java:19) 20151102 11:57:50.666 | 信息 | 池 3 线程 6 | ---------------[37] | TestJob.test(TestJob.java:19)

线程堆栈跟踪:

“pool-3-thread-2”#26 prio=5 os_prio=0 tid=0x00007fbea0cd9800 nid=0x74f2 等待条件 [0x00007fbf0d3d2000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(本机方法) - 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent 停车等待 <0x0000000763ed3710> (一个 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) .locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java :809) 在 java.util.concurrent.ThreadPoolExecutor。getTask(ThreadPoolExecutor.java:1067) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread .run(Thread.java:745)

“pool-3-thread-4”#28 prio=5 os_prio=0 tid=0x00007fbea0783800 nid=0x74f4 等待条件 [0x00007fbf0d1d0000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(本机方法) - 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent 停车等待 <0x0000000763ed3710> (一个 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) .locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java :809) 在 java.util.concurrent.ThreadPoolExecutor。getTask(ThreadPoolExecutor.java:1067) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread .run(Thread.java:745)

预定的 javadoc 说

@Scheduled 注解的处理是通过注册一个 ScheduledAnnotationBeanPostProcessor 来执行的。

我自己没有命名这个类,只有 @EnableScheduling 带注释的主类。

有谁知道如何解决这个问题?

更新: 我附上了一张Eclipse调试屏幕截图,池正在增加,所有旧线程都在运行......希望它能澄清我的问题。

我附上了一张Eclipse调试屏幕截图,池正在增加,所有旧线程都在运行......希望它能澄清我的问题。

更新:我想我这次做对了。spring boot scheduler的默认池大小为100,所有线程都处于运行状态。我真的不明白,运行什么?我认为它应该等待一些东西,为什么不呢?有谁知道如何使用注释配置 Spring Boot 计划池大小?我没有在我的应用程序中使用 xml,也不愿意只为调度程序引入它。

0 投票
1 回答
451 浏览

java - 春季计划 3:00 至 6:30 之间的 cron

我想在 3:00 到 6:30 之间每 5 分钟安排一次工作。

这在 3:00 到 5:55 之间每 5 分钟安排一次我的工作:

但是我如何才能@scheduled包括最后 35 分钟呢?

0 投票
0 回答
470 浏览

java - 石英、弹簧调度器和弹簧石英调度器同步

我正在尝试创建一个同步计划作业,当我使用带有@DisallowConcurrentExecution注释的石英实现此操作时,该方法将被序列化,并且org.quartz.threadPool.threadCount属性设置为 1 我只创建了一个同步线程。

我想知道我们如何使用 spring scheduler 和 spring quartz scheduler 创建一个同步作业。

0 投票
1 回答
388 浏览

java - 树莓派 2 Java 8 JVM 错误

我正在构建一个基于 Java 1.8、spring、hibernate、mysql 并使用 tomcat 作为 web 服务器的 web 应用程序。现在我的应用程序正在记录(@5 秒间隔)覆盆子的系统数据,例如;cpu温度,cpu核心电压,已用内存,可用内存,内存缓冲区等。问题是应用程序有时会因为内存不足而崩溃,我无法确定原因。

首先,在 tomcat 上,我在 tomcat 的启动服务中有以下几行:

它在启动tomcat后大约8小时内崩溃。我删除了这些行,现在它在大约 2 天后崩溃,因为它内存不足。今天这是第一次在启动脚本中没有这些行的情况下崩溃,我在 db 中插入的最后一行是:

对于此信息,我正在使用 pi4j 库中的 SystemInfo 类。getMemoryUsed() 以位为单位返回已用内存,因此经过简单的数学运算后,我们获得了 913.92 Mb 的已用内存。

当应用程序启动时,它仅消耗 250 Mb 内存,3 天后应用程序崩溃,因为它达到了树莓派的最大内存。

春季应用配置:

调度器类:

基础回购:

现在我在日志中没有找到错误,但过去它因 SIGILL 错误而崩溃。找到日志后,我将编辑这篇文章。

我发现来自 JVM 的错误日志:

我发现了一个非常奇怪的行为。在遵循评论的建议后,我在 tomcat 启动脚本中添加了以下几行:

我将 Java Mission Control 和 Flight Recording 连接到 raspberry 的 JVM。奇怪的是,经过 12 小时的监控,JVM 没有崩溃,一切正常。使用“XX:+UnlockCommercialFeatures -XX:+FlightRecorder”和“-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote”重新启动服务器后.ssl=false" removerd,JVM 在 7 小时后崩溃。

通过连接到 JVM 的 Mission Control 和 Flight Recording,我还注意到 Committed Heap 一直在上升,但从未下降。

Java内存堆图

0 投票
1 回答
1182 浏览

java - Spring 调度程序 cpu 使用率

我注意到,在我开始使用@EnableScheduling@Scheduled注释之后,JVM 正在运行的主机上的 cpu 使用率保持相当高。任何人都可以对此提供任何解释吗?阅读文档,它说只有 1 个线程TaskExecutor,所以除非这个线程一直在运行,否则我看不出 cpu 使用率怎么会这么高。

@Scheduled方法查询一个 http api 并平均返回大约 20 条 json 行,这些行被转换为对象然后存储到数据库中,当在没有注释和跟踪其周围的指标的情况下运行该方法时,在 AWS t2 上最多需要 2 秒。中等的。执行此方法时cpu使用率跳得更高,但在间隔期间cpu使用率仍然很高。调度间隔为每30分钟一次。

我指的文档: https ://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.htm

0 投票
0 回答
213 浏览

spring - 当系统时间设置回来时,Spring @Scheduled 停止运行

我正在运行基于 Spring Boot 的 cron 作业:

大多数情况下,它运行完美。但是当我将系统时间改回来时,例如一个月,它会运行一次并且永远不会再次运行。但是,如果我将系统向后更改,它将按计划运行。任何人都知道为什么会发生这种情况,也许有解决方案?高度赞赏!

0 投票
1 回答
6583 浏览

java - 如何将 @Configuration 和 @EnableScheduling 与 Spring Batch 一起使用

由于“只有返回无效的方法可以用”注释,当我使用配置而不是xml配置@Scheduled时,如何使用Spring Batch和Spring Scheduler Task ?@Bean您可以在下面找到我的完整配置文件。当我触发时它运行完美,main()但只有一次。我想添加@Scheduled(fixedrate=9999)以便以特定频率唤起相同的工作。据我所知,为了做到这一点,我应该@Scheduled在 step1 方法周围添加,但我不能,因为它返回与 void 不同。

0 投票
1 回答
1306 浏览

java - @Scheduled 在服务器启动时被调用

我们在项目中使用 JBoss App server 7.0.0、Spring 4.1.6、Hibernate-JPA 2.0。我想以属性中指定的配置间隔保存数据。为此,我正在使用 spring 调度
@Scheduled(fixedRateString = "${db.commit.interval}")
public void commitToDB()
但我面临的一个问题是在服务器启动时自动调用此方法,这意味着如果我安排此方法每 5 分钟调用一次,我希望在服务器在 12:00:00 启动后使用此方法应该在 12:00:05 调用,但仅在 12:00:00 调用(即在服务器启动时)。任何人都可以建议这是一个问题还是我错过了什么?

0 投票
2 回答
9194 浏览

spring - 来自属性文件的 Spring @Scheduled cron 详细信息 - 异常

我试图在我的 spring @Scheduled 方法中定义 cron 详细信息

在我的 application.properties

当我与@Scheduled 一起定义 cron 详细信息时,它运行良好。但是当我这样做时,它无法从属性文件中读取值,并引发以下错误。

请问有什么建议吗?