bladex-boot如何做定时任务

Blade 未结 1 20

一、该问题的重现步骤是什么?


1. 咨询下bladex-boot如何做定时任务,之前写bladex-cloud(3.2.0版本)的时候用xxl-job做的定时任务,上面是有测试用例的,能够自己完成开发

2. 现在用bladex-boot(4.6.0)版本的没看到测试用例,另外我这个是个小项目,不想起多个服务,能用@EnableScheduling注解做定时任务最好

3.现在用@EnableScheduling注解会报错,不知道哪里冲突了


二、你期待的结果是什么?实际看到的又是什么?


  1. 用bladex-boot的xxl-job,但是不多起服务

  2. 用@EnableScheduling注解做定时任务


5.13 分布式任务调度这个doc我看过了


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

商业版 bladex-boot(4.6.0)


四、请提供详细的错误堆栈信息,这很重要。


用注释的报错信息

2025-09-26 10:21:29.463 ERROR 17216 --- [   scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task


java.lang.NullPointerException: null

at java.base/java.util.Objects.requireNonNull(Objects.java:208)

at org.springblade.core.log.aspect.RequestLogAspect.aroundApi(RequestLogAspect.java:96)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:568)

at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)

at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)

at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)

at org.dftc.eletricdrive.eag.controller.BladeUserController$$SpringCGLIB$$0.syncUser(<generated>)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:568)

at org.springframework.scheduling.support.ScheduledMethodRunnable.runInternal(ScheduledMethodRunnable.java:130)

at org.springframework.scheduling.support.ScheduledMethodRunnable.lambda$run$2(ScheduledMethodRunnable.java:124)

at io.micrometer.observation.Observation.observe(Observation.java:499)

at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:124)

at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)

at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305)

at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)

at java.base/java.lang.Thread.run(Thread.java:842)


2025-09-26 10:21:29.487  INFO 17216 --- [           main] o.s.c.literule.engine.RulePreloadRunner  : Starting to warm up the blade rule cache

2025-09-26 10:21:29.488  INFO 17216 --- [           main] o.s.c.literule.engine.RulePreloadRunner  : Rule cache warmup completed, cached 3 rule flows

2025-09-26 10:21:29.488  INFO 17216 --- [           main] o.s.c.literule.engine.RulePreloadRunner  : Rule preload completed, loaded 26 rules and 3 rule flows, cost 30ms


五、若有更多详细信息,请在下面提供。


1条回答
  • package org.springblade.common.job;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    /**
     * 简单的Spring Task定时任务示例
     *
     * @author BladeX
     */
    @Slf4j
    @Component
    public class SimpleScheduledTask {
    
        private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
        /**
         * 每秒执行一次的定时任务
         * 使用fixedDelay确保任务执行完成后再等待1秒
         */
        @Scheduled(fixedDelay = 1000)
        public void printMessage() {
           String currentTime = LocalDateTime.now().format(DATE_TIME_FORMATTER);
           log.info("Spring Task 定时任务执行中 - 当前时间: {}", currentTime);
        }
    }

    CleanShot20250926110302@2x.png

    0 讨论(0)
提交回复