我有一个使用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?
答案 0 :(得分:0)
我假设您的SpringBoot应用程序在某处声明了@EnableScheduling
。尝试将其添加到您的@JpaTest
答案 1 :(得分:0)
我不知道如何修复组件扫描本身,但是一种解决方法是在代码中显式注册Scheduler
:
@Configuration
class SchedulerConfiguration {
@Bean
fun scheduler(): Scheduler = StdSchedulerFactory.getDefaultScheduler()
}