Spring 如何在java中管理单个项目中两个独立cron的日志
在Spring中运行多个Cron时存在一个问题。我创建了多模块maven项目,其中有两个单独的cron在运行,但在某个时间点,它们重合,从日志中调试变得非常乏味 是否有任何方法可以使用单独的日志,或者当一个cron正在运行时,另一个cron不应该启动,我的意思是在某个时间点,只有一个cron应该运行Spring 如何在java中管理单个项目中两个独立cron的日志,spring,cron,Spring,Cron,在Spring中运行多个Cron时存在一个问题。我创建了多模块maven项目,其中有两个单独的cron在运行,但在某个时间点,它们重合,从日志中调试变得非常乏味 是否有任何方法可以使用单独的日志,或者当一个cron正在运行时,另一个cron不应该启动,我的意思是在某个时间点,只有一个cron应该运行 @Scheduled(cron="0 0 */2 * * *") public void startAnalysis() { logger.info
@Scheduled(cron="0 0 */2 * * *")
public void startAnalysis() {
logger.info("Inside of Analysis scheduler");
// Doing Something
}
@Scheduled(cron="0 0 */6 * * *")
public void startAnalysis() {
logger.info("Inside of Analysis1 scheduler");
// Doing Something
}
上面是我正在运行的两个cron。目前,我使用sl4j进行日志记录。您可以创建两个记录器实例,每个实例的名称不同,并将它们配置为在日志记录框架中记录到不同的文件 Spring默认使用单线程执行器。所以没有两个 @计划任务将同时执行。即使有两个 @完全不相关类中的计划方法不会重叠 这是因为只有一个线程来执行任务 同时执行任务的唯一可能性是具有多线程执行器,其定义为:
@EnableScheduling
@Configuration
public class MyConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar
scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(taskExecutor());
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(5);
}
}
- 如果您有这样的自定义配置,为调度任务定义了一个线程池,那么应该删除它
您是在单线程执行器还是多线程执行器中运行两个cron?目前使用的是单线程。因此,正如我在回答中所述,不会有任何重叠,并且不能同时执行多个任务,因为有一个线程可供执行。我可以从何处获得实现这两个线程的参考信息您提到的实例
Logger LOG1=LoggerFactory.getLogger(“name1”);Logger LOG2=LoggerFactory.getLogger(“name2”)
然后在用于记录不同文件的日志框架中配置它们,通常是通过配置appender。