如何从另一个模块访问Spring Boot Quartz Bean?

问题描述 投票:1回答:1

我有一个Spring Boot项目,该项目将使用Quartz来管理某些脚本的运行。项目布局如下:

scheduler
|
|__scheduler-api
|  |
|  |__quartz-bean
|
|__scheduler-composition
   |
   |__service-to-schedule-quartz-jobs-using-quartz-bean

api模块是一个Spring Boot应用程序,石英豆位于其中。我的服务所在的位置是composition模块,该模块将用于向Quartz添加作业和触发器。我遇到的问题是无法从composition模块访问我的Quartz bean,因此我无法像我想要的那样安排服务中的作业。我的Quartz bean定义如下:

@Configuration
class QuartzScheduler {
    @Autowired
    private val applicationContext: ApplicationContext? = null

    @Autowired
    private val databaseConfiguration: DatabaseConfiguration? = null

    @Bean
    fun springBeanJobFactory(): SpringBeanJobFactory {
        val jobFactory = AutoWiringSpringBeanJobFactory()
        jobFactory.setApplicationContext(applicationContext!!)
        return jobFactory
    }

    @Bean
    @Throws(SchedulerException::class)
    fun scheduler(@Qualifier("schedulerFactoryBean") factory: SchedulerFactoryBean): Scheduler {
        val scheduler = factory.scheduler   
        scheduler.start()
        return scheduler
    }

    @Bean
    @Throws(IOException::class)
    fun schedulerFactoryBean(): SchedulerFactoryBean {
        val factory = SchedulerFactoryBean()
        factory.setDataSource(databaseConfiguration!!.dataSource())
        factory.setJobFactory(springBeanJobFactory())
        factory.setQuartzProperties(quartzProperties())
        return factory
    }

    @Throws(IOException::class)
    fun quartzProperties(): Properties {
        val propertiesFactoryBean = PropertiesFactoryBean()
        propertiesFactoryBean.setLocation(ClassPathResource("/quartz.properties"))
        propertiesFactoryBean.afterPropertiesSet()
        return propertiesFactoryBean.getObject()!!
    }
}

我尝试过的几件事包括将Quarts bean移至composition模块,但随后它无法访问所需的数据库配置。我还尝试将api模块导入composition模块,但是它创建了循环依赖项。有人可以帮助我从我的撰写模块访问Quartz bean吗?我是Spring Boot的新手,所以我不确定自己哪里出了问题或什至选择了什么。谢谢!

java spring-boot kotlin spring-data-jpa quartz-scheduler
1个回答
0
投票

您既没有在类上也没有在Bean上指定任何访问修饰符。默认访问权限位于包级别,因此您将无法在包外部访问它。

在下面将访问修饰符赋予公共属性

@Configuration
public class QuartzScheduler {
    ...
    @Bean
    public fun springBeanJobFactory(): SpringBeanJobFactory {
        ...
    }

此外,@Configuration类必须是公共的。

© www.soinside.com 2019 - 2024. All rights reserved.