问题标签 [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.
spring-mvc - 我正在尝试在计划的函数中初始化请求,但请求的初始化不起作用?
我正在尝试在计划的函数中初始化 HttpServletRequest 并根据 cron 作业执行操作。但该功能在初始化请求后停止。我现在该怎么办 ?我正在研究spring mvc。这是我的代码:
输出打印 hello 1 但不打印 hello 2 。该函数在初始化 HttpServletRequest 后停止。我现在该怎么办 。
java - 春季计划任务的错误处理
spring-scheduler.xml:
我正在使用以下代码来加载配置。
有没有办法检查我的任务是否已安排?如果 xml 中没有计划或计划任务,有没有办法抛出错误?
spring - WRONG_DOCUMENT_ERR:一个节点在不同的文档中使用 - 只有在添加调度程序后才会出现错误
我创建了一个基于 Spring Batch 的应用程序,它基本上有一个自定义 itemreader 用于读取文件夹以搜索候选文件,一个自定义 itemprocessor 用于读取文件并将其转换为不同的文件,以及一个自定义 itemwriter 以删除文件。在我添加调度程序之前,它按预期工作,没有错误。添加调度程序后,我将错误粘贴在问题主题中。我发现了一些具有相似问题但背景非常不同的问题。必须奇怪的一点是,事实上,即使我在控制台上看到这样的错误,它也能正常工作。我的意思是,读取文件夹(itemreader),转换文件(itemprocessor)并删除输入文件(itemwriter)。我很困扰。如果我可以在没有调度程序的情况下重现错误,然后我可以专注于某个节点,或者在我引入调度程序后我没有得到结果,所以我可以专注于调度程序配置中的一些可能的错误,但两者都不是这样。任何建议将不胜感激。
下一段是在 1 月 10 日添加的:经过深入调查,我发现这种错误只发生一次,而且只发生在主线程中。我的意思是,如果我在开始申请时有一个候选文件,那么我会得到 WRONG_DOCUMENT_ERR。比方说,我启动我的应用程序时没有可供 CustomItemReader 找到的文件,等到主线程完成,然后我放置一个可供 CustomItemReader 找到的候选文件,根本不会有错误。换句话说,当 CustomItemReader 被 pool-2-thread-1 触发并找到一个文件时,它可以正常工作。另一方面,当主线程触发 CustomItemReader 并找到一个文件时,这仅在应用程序启动期间发生,它会导致问题。通过使用 JConsole,我可以检查主线程是否已消失,并且 pool-2-thread-1 是否已启动并正在运行。然后,我将我的文件添加到输入文件夹中,这会导致 CustomItemReader 返回一个字符串而不是 null 并且不会出现错误。当然,我错过了一些关于一起使用 Spring Scheduler 和 Spring Batch 的概念。显然,我希望我的应用程序在我启动它时不会引发任何错误,并且它很快就会找到它初始化的文件。为什么它只发生在主线程中,但如果我把 Spring Scheduler 拿出来,它会按预期工作一次?我错过了一些同步参数吗?为什么它只发生在主线程中,但如果我把 Spring Scheduler 拿出来,它会按预期工作一次?我错过了一些同步参数吗?为什么它只发生在主线程中,但如果我把 Spring Scheduler 拿出来,它会按预期工作一次?我错过了一些同步参数吗?
下一段是在 1 月 11 日添加的:我只用更大的片段更新了发生错误的类。其他所有保持不变。
//----
//-----
//----
//----
//----
//----
:: Spring Boot :: (v1.3.1.RELEASE)
2016-01-08 14:51:44.783 INFO 7716 --- [main] com.example.DemoApplication:在 PID 7716 的 GH-VDIKCISV252 上启动 DemoApplication(C:\STS\wsRestTemplate\demo\target\classes 由 e049447 在C:\STS\wsRestTemplate\demo)
2016-01-08 14:51:44.788 INFO 7716 --- [main] com.example.DemoApplication:未设置活动配置文件,回退到默认配置文件:默认
2016-01-08 14:51:44.955 INFO 7716 --- [main] scaAnnotationConfigApplicationContext:刷新 org.springframework.context.annotation.AnnotationConfigApplicationContext@6e2c9341:启动日期 [Fri Jan 08 14:51:44 CST 2016];上下文层次的根
2016-01-08 14:51:50.882 WARN 7716 --- [main] oscaConfigurationClassEnhancer:@Bean 方法 ScopeConfiguration.stepScope 是非静态的,并返回一个可分配给 Spring 的 BeanFactoryPostProcessor 接口的对象。这将导致无法处理方法的声明@Configuration 类中的@Autowired、@Resource 和@PostConstruct 等注解。将“静态”修饰符添加到此方法以避免这些容器生命周期问题;有关完整的详细信息,请参阅@Bean javadoc。
2016-01-08 14:51:51.030 WARN 7716 --- [main] oscaConfigurationClassEnhancer:@Bean 方法 ScopeConfiguration.jobScope 是非静态的,并返回一个可分配给 Spring 的 BeanFactoryPostProcessor 接口的对象。这将导致无法处理方法的声明@Configuration 类中的@Autowired、@Resource 和@PostConstruct 等注解。将“静态”修饰符添加到此方法以避免这些容器生命周期问题;有关完整的详细信息,请参阅@Bean javadoc。
2016-01-08 14:51:51.386 INFO 7716 --- [main] osjdeEmbeddedDatabaseFactory:启动嵌入式数据库:url='jdbc:hsqldb:mem:testdb',username='sa'
2016-01-08 14:51:52.503 WARN 7716 --- [main] osbclAbstractListenerFactoryBean:org.springframework.batch.item.ItemReader 是一个接口。不会查询实现类以获取基于注释的侦听器配置。如果在 @Bean 方法上使用 @StepScope,请务必返回实现类,以便可以使用侦听器注释。
2016-01-08 14:51:53.572 INFO 7716 --- [main] osjdbc.datasource.init.ScriptUtils:从类路径资源 [org/springframework/batch/core/schema-hsqldb.sql] 执行 SQL 脚本
2016-01-08 14:51:53.667 INFO 7716 --- [main] osjdbc.datasource.init.ScriptUtils:从 94 中的类路径资源 [org/springframework/batch/core/schema-hsqldb.sql] 执行 SQL 脚本小姐。
2016-01-08 14:51:54.506 INFO 7716 --- [main] osjeaAnnotationMBeanExporter:在启动时为 JMX 公开注册 bean
2016-01-08 14:51:54.617 INFO 7716 --- [pool-2-thread-1] osbcrsJobRepositoryFactoryBean:未设置数据库类型,使用元数据指示:HSQL
2016-01-08 14:51:54.744 INFO 7716 --- [main] osbabJobLauncherCommandLineRunner:运行默认命令行:[]
2016-01-08 14:51:54.745 INFO 7716 --- [main] osbcrsJobRepositoryFactoryBean:未设置数据库类型,使用元数据指示:HSQL
2016-01-08 14:51:54.912 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher:未设置任务执行器,默认为同步执行器。
2016-01-08 14:51:54.961 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher:未设置任务执行器,默认为同步执行器。
2016-01-08 14:51:55.044 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数启动:[{}]
2016-01-08 14:51:55.088 INFO 7716 --- [pool-2-thread-1] osbatch.core.job.SimpleStepHandler:执行步骤:[step1]
2016-01-08 14:51:55.095 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数启动:[{run.id=1}]
2016-01-08 14:51:55.176 INFO 7716 --- [main] osbatch.core.job.SimpleStepHandler:执行步骤:[step1]
2016-01-08 14:51:55.245 INFO 7716 --- [main] com.example.CustomItemReader:读取方法 - 收集输出文件名
2016-01-08 14:51:55.314 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader:读取方法 - 收集输出文件名
2016-01-08 14:51:55.440 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader:读取方法 - 找到文件
2016-01-08 14:51:55.443 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemProcessor:处理方法:
2016-01-08 14:51:55.461 INFO 7716 --- [main] com.example.CustomItemReader:读取方法 - 找到文件
2016-01-08 14:51:55.462 INFO 7716 --- [main] com.example.CustomItemProcessor:处理方法:
2016-01-08 14:51:57.088 错误 7716 --- [pool-2-thread-1] osbatch.core.step.AbstractStep:在作业 job1 中执行步骤 step1 时遇到错误
org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: 一个节点在与创建它的文档不同的文档中使用。
2016-01-08 14:51:57.104 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数完成:[{}] 和以下状态:[失败]
2016-01-08 14:51:57.754 INFO 7716 --- [main] com.example.CustomItemWriter:写入方法:[C:\myApp\from\0000000571900000999674MHlog.txt.out]
2016-01-08 14:51:57.761 INFO 7716 --- [main] com.example.CustomItemReader:读取方法 - 收集输出文件名
2016-01-08 14:51:57.762 INFO 7716 --- [main] com.example.CustomItemReader:读取方法 - 未找到文件
2016-01-08 14:51:57.783 INFO 7716 --- [main] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数完成:[{run.id=1}] 和以下状态:[已完成]
2016-01-08 14:51:57.786 INFO 7716 --- [main] com.example.DemoApplication:在 13.693 秒内启动了 DemoApplication(JVM 运行时间为 14.853)
2016-01-08 14:52:54.724 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数启动:[{}]
2016-01-08 14:52:54.750 INFO 7716 --- [pool-2-thread-1] osbatch.core.job.SimpleStepHandler:执行步骤:[step1]
2016-01-08 14:52:54.755 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader:读取方法 - 收集输出文件名
2016-01-08 14:52:54.756 INFO 7716 --- [pool-2-thread-1] com.example.CustomItemReader:读取方法 - 未找到文件
2016-01-08 14:52:54.775 INFO 7716 --- [pool-2-thread-1] osbclsupport.SimpleJobLauncher:作业:[SimpleJob:[name=job1]] 使用以下参数完成:[{}] 和以下状态:[已完成]
spring - 如何在 Spring 中创建一个应用程序来轮询 10 个 JMX URI 并存储在 DB 中
如何创建一个应用程序来轮询 50 个 JMX URI 并将 mbeans 存储在 DB 中。我创建了一个类,它将连接到 jmx 服务器并获取 mbeans 值。我的问题是如何触发我创建的类和方法继续轮询。此外,我需要两个函数来随时启动和停止此轮询。
我可以使用什么 - Spring Scheduler、Spring Integration 以及如何或应该创建具有线程和无限循环的不同类。
spring - 如何使 Spring Scheduling 定期调用具有单个 tasklet 的作业
使用 annotation @Scheduled(fixedRate = 600000)
,我希望每 10 分钟(600000 毫秒 = 600 秒 = 10 分钟)触发作业,因此也会触发 tasklet。首先,我尝试使用,return RepeatStatus.FINISHED
因为我知道 spring 调度程序会每 10 分钟触发一个独立线程。事实上,如果我使用return RepeatStatus.FINISHED
,它根本就完成了程序,也就是说spring scheduler不会再调用job了。我不确定我是否在 Spring Scheduler 中设置了错误,或者我对 tasklet 有一些错误的概念。根据经验,根据我最近的研究,我认为,当我不需要读写器方法时,tasklet 是一个可能的替代方案。我想创建一个批处理,每十分钟将文件从一个文件夹移动到另一个文件夹。不会有文件处理。从控制台日志中,我可以看到TestScheduller.runJob
当我运行CommandLineJobRunner
. 然后,作为我的第一次调查测试,我改为return RepeatStatus.CONTINUABLE
之后,我注意到 tasklet 确实运行了无限时间,但不是 10 分钟,而是每 1 秒。当然,这是不正确的。此外,这项工作根本没有完成。所以,我的问题是:我怎样才能让 spring.schedulling 每十分钟唤起下面的工作?
为了每 10 分钟触发一次 tasklet 而创建的调度程序:
Java 配置类
Tasklet:公共类 HelloWorldTasklet 实现 Tasklet {
控制台日志:
spring - Spring Batch 在流程中有两个步骤。为什么第二步永远不会运行,第一步是无限循环
我的要求:创建一个调度程序来定期调用批处理,并且在批处理内部,我需要两个步骤。StepA 将开始运行,根据结果,StepB 将调用。如果您查看控制台日志,您将看到 stepA 被多次调用,比如说,完全相同的时刻。根据@Scheduled(fixedRate=60000) 每分钟应该只有一个电话。我猜这个问题与调度程序没有关系,因为我删除了调度程序并且我遇到了类似的问题。其他相关问题是从未调用过 StepB。我尝试创建 customDecider ("...next(customDecider()") 并创建一个私有方法来返回 JobExecutionDecider。似乎两者都没有生效。我最好的猜测是池线程导致StepA 中的一些“无限循环”,因为我没有
批处理配置.java
CustomDecider.java
CustomItemReaderB 和 CustomItemReaderB 与 Custom...A 相同,只是在 log.info 期间从 A 变为 B 字母并返回
控制台日志
调度器
java - 在 @Scheduled(cron ="Some String") 中分配字符串
我们有一个属性文件,我们在其中提到要从 JSON/Zookeeper 中获取属性。
例子:
在 SampleApp.properties 中,我们将指定
有很多示例如何使用属性文件在 @Scheduled 注释中分配属性。
但在这种情况下,
我们必须使用一些 Java 类(比如 Name is Config
)读取属性String cronExp=Config.get("CRONEXPRESSION") ;
并将该 cron 放入@Scheduled(cron = cronExp)
..这可能吗?
请注意,我们不能将 CRONEXPRESSION 属性直接移动到属性文件中。在属性文件中我们提到了 json 。在我们读取该 json 并从那里选择属性的代码中。
java - 没有@Scheduled注解/xml配置的Spring Schwduler
有没有办法在不使用@Scheduled注解/xml配置的情况下使用spring调度器来调度任务。
java - Spring 的 @Scheduled 注释可以与自定义配置提供程序一起使用吗?
我想使用 Spring 的 @Scheduled 注解的 cron 语法特性。但是,我需要从 Spring 的 PropertyPlaceholder 以外的配置提供程序加载 cron 计划。是否可以使用调度程序可以使用的自定义属性提供程序?
java - 如何阻止 Spring @Scheduled 排队工作
我使用 @Scheduled 注释每两分钟运行一次代码。然而,我们的工作往往会运行更长的时间。据我了解,@Scheduled 注释将新作业排队并在第一个作业完成后立即运行它们。我不希望这种情况发生。我希望只有 1 个作业实例正在运行,并且没有排队的实例。我怎样才能做到这一点?