问题标签 [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.
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
我们有两个数据源,一个供内部使用,另一个供外部使用
应用程序属性
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调试屏幕截图,池正在增加,所有旧线程都在运行......希望它能澄清我的问题。
更新:我想我这次做对了。spring boot scheduler的默认池大小为100,所有线程都处于运行状态。我真的不明白,运行什么?我认为它应该等待一些东西,为什么不呢?有谁知道如何使用注释配置 Spring Boot 计划池大小?我没有在我的应用程序中使用 xml,也不愿意只为调度程序引入它。
java - 春季计划 3:00 至 6:30 之间的 cron
我想在 3:00 到 6:30 之间每 5 分钟安排一次工作。
这在 3:00 到 5:55 之间每 5 分钟安排一次我的工作:
但是我如何才能@scheduled
包括最后 35 分钟呢?
java - 石英、弹簧调度器和弹簧石英调度器同步
我正在尝试创建一个同步计划作业,当我使用带有@DisallowConcurrentExecution注释的石英实现此操作时,该方法将被序列化,并且org.quartz.threadPool.threadCount属性设置为 1 我只创建了一个同步线程。
我想知道我们如何使用 spring scheduler 和 spring quartz scheduler 创建一个同步作业。
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 - Spring 调度程序 cpu 使用率
我注意到,在我开始使用@EnableScheduling
和@Scheduled
注释之后,JVM 正在运行的主机上的 cpu 使用率保持相当高。任何人都可以对此提供任何解释吗?阅读文档,它说只有 1 个线程TaskExecutor
,所以除非这个线程一直在运行,否则我看不出 cpu 使用率怎么会这么高。
该@Scheduled
方法查询一个 http api 并平均返回大约 20 条 json 行,这些行被转换为对象然后存储到数据库中,当在没有注释和跟踪其周围的指标的情况下运行该方法时,在 AWS t2 上最多需要 2 秒。中等的。执行此方法时cpu使用率跳得更高,但在间隔期间cpu使用率仍然很高。调度间隔为每30分钟一次。
spring - 当系统时间设置回来时,Spring @Scheduled 停止运行
我正在运行基于 Spring Boot 的 cron 作业:
大多数情况下,它运行完美。但是当我将系统时间改回来时,例如一个月,它会运行一次并且永远不会再次运行。但是,如果我将系统向后更改,它将按计划运行。任何人都知道为什么会发生这种情况,也许有解决方案?高度赞赏!
java - 如何将 @Configuration 和 @EnableScheduling 与 Spring Batch 一起使用
由于“只有返回无效的方法可以用”注释,当我使用配置而不是xml配置@Scheduled
时,如何使用Spring Batch和Spring Scheduler Task ?@Bean
您可以在下面找到我的完整配置文件。当我触发时它运行完美,main()
但只有一次。我想添加@Scheduled(fixedrate=9999)
以便以特定频率唤起相同的工作。据我所知,为了做到这一点,我应该@Scheduled
在 step1 方法周围添加,但我不能,因为它返回与 void 不同。
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 调用(即在服务器启动时)。任何人都可以建议这是一个问题还是我错过了什么?
spring - 来自属性文件的 Spring @Scheduled cron 详细信息 - 异常
我试图在我的 spring @Scheduled 方法中定义 cron 详细信息
在我的 application.properties
当我与@Scheduled 一起定义 cron 详细信息时,它运行良好。但是当我这样做时,它无法从属性文件中读取值,并引发以下错误。
请问有什么建议吗?