调度程序未在 Spring Boot 中运行

2022-09-01 14:56:44

我创建了一个Spring Boot应用程序。我已经配置了包含调度程序方法的类。以下是我的代码:startService()

服务等级 :

package com.mk.service;  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.mk.envers.model.BossExtChange;
import com.mk.envers.model.BossExtChangeRepository;

@Component
public class EnverseDemoService {

    @Autowired
    BossExtChangeRepository bossExtChangeRepository;

    @Scheduled(fixedRate = 30000)
    public void startService() {
        System.out.println("Calling startService()");
        BossExtChange bossExtChange = bossExtChangeRepository.findById(5256868L);
        System.out.println("bossExtChange.getDescription()--->"+bossExtChange.getDescription());
        System.out.println("Ending startService()");
    }
}

主要类别 :

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(EnverseDemoApplication.class, args);
    }
}

我已经将类注释为和方法,因为它将作为调度程序运行。但是,在以 Spring Boot 身份运行应用程序时,调度程序不会触发。控制台显示以下消息:@Component@Scheduled(fixedRate = 30000)

2016-02-03 10:56:47.708  INFO 10136 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup 
2016-02-03 10:56:47.721  INFO 10136 --- [           main] com.mk.envers.EnverseDemoApplication     : Started EnverseDemoApplication in 3.231 seconds (JVM running for 3.623)
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@49e202ad: startup date [Wed Feb 03 10:56:44 IST 2016]; root of context hierarchy
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown 
2016-02-03 10:56:47.736  INFO 10136 --- [       Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

任何人都可以帮我。


答案 1

也许您可以通过在配置文件中添加@ComponentScan注释来解决此问题

@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.mk.service")
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(EnverseDemoApplication.class, args);
    }
}

答案 2

我能够解决问题,我忘记提供@service级别注释,我创建了@Scheduler的检查列表,请逐一检查每个点,它将帮助您解决问题。

  1. 检查SpringBoot Main类上的@EnableScheduling。
  2. 计划方法应使用@Scheduled进行批注,遵循@Scheduled方法规则。方法应具有 void 返回类型,方法不应接受任何参数。
  3. 确保类应该用@Service或@Component注释来注释,以便SpringBoot可以成为该类的对象。
  4. 计划程序作业的包应位于主 Application 类的包下。例如 com.company 是您的主要应用程序类包,那么调度程序类包应该是 com.company.scheduler,
  5. 如果您使用的是Cron表达式,请确认相同的@Scheduled(cron = “0 0/2 * * * ?”),此Cron表达式将每2分钟安排一次任务。

随意在评论中添加更多点,这将有助于解决问题。


推荐