NoSuchBeanDefinitionException with Quartz in test

时间:2019-04-25 14:14:41

标签: java spring spring-boot quartz component-scan

我有一个使用Quartz调度程序的Spring Boot(2.1.3)项目。它是通过启动器包含的:

dependencies {
    ...
    implementation('org.springframework.boot:spring-boot-starter-quartz')
}

(主要)应用程序配置有组件扫描。如果我运行该应用程序,一切都很好。如果我运行带有@SprinBootTest注释的测试,那么一切都很好。但是,如果我使用此自定义注释

@DataJpaTest
@ComponentScan(basePackages = ["com.mycompany"])
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("intTest")
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@Inherited
annotation class JpaTest

我得到一个@SpringBootTest而不是NoSuchBeanDefinitionException,因为找不到石英Scheduler

我试图将Quartz软件包添加到组件扫描中,但这无济于事:

@ComponentScan(basePackages = ["com.mycompany", "org.quartz"])

如何让Spring使用带有自定义配置注释的测试设置来获取Scheduler?

2 个答案:

答案 0 :(得分:0)

我假设您的SpringBoot应用程序在某处声明了@EnableScheduling。尝试将其添加到您的@JpaTest

答案 1 :(得分:0)

我不知道如何修复组件扫描本身,但是一种解决方法是在代码中显式注册Scheduler

@Configuration
class SchedulerConfiguration {

    @Bean
    fun scheduler(): Scheduler = StdSchedulerFactory.getDefaultScheduler()
}