为了便于干净的初始化部署运行S2JH框架,采用了jdbc:initialize-database来从SQL脚本中初始化框架基础数据,其中遇到一个问题:
框架使用了Spring与Quartz集成以JDBC方式进行Cluster集群定时任务支持,其中一个需要提前准备的就是需要初始化好Quartz需要的相关数据表,但是按照默认设置Spring Scheduler始终会在jdbc:initialize-database之前就优先加载,导致spring scheduler加载过程抛出Quartz相关数据表Table Not Found的异常。
由于jdbc:initialize-database不是按照常规的bean id方式定义,导致没法直接以depends-on控制依赖加载顺序,通过分析jdbc:initialize-database相关schema定义和对应源代码,最终以一种特殊的depends-on写法实现了顺序控制:
<bean id="quartzClusterScheduler" class="lab.s2jh.schedule.ExtSchedulerFactoryBean" depends-on="org.springframework.jdbc.datasource.init.DataSourceInitializer#0">
详见相关代码: