Spring 如何在java中管理单个项目中两个独立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

在Spring中运行多个Cron时存在一个问题。我创建了多模块maven项目,其中有两个单独的cron在运行,但在某个时间点,它们重合,从日志中调试变得非常乏味

是否有任何方法可以使用单独的日志,或者当一个cron正在运行时,另一个cron不应该启动,我的意思是在某个时间点,只有一个cron应该运行

    @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);
    }
}
  • 如果您有这样的自定义配置,为调度任务定义了一个线程池,那么应该删除它

请使用Log4J编程配置,您可以分隔不同的日志文件


您是在单线程执行器还是多线程执行器中运行两个cron?目前使用的是单线程。因此,正如我在回答中所述,不会有任何重叠,并且不能同时执行多个任务,因为有一个线程可供执行。我可以从何处获得实现这两个线程的参考信息您提到的实例
Logger LOG1=LoggerFactory.getLogger(“name1”);Logger LOG2=LoggerFactory.getLogger(“name2”)
然后在用于记录不同文件的日志框架中配置它们,通常是通过配置appender。