S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序

为了便于干净的初始化部署运行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">

详见相关代码:

http://git.oschina.net/xautlx/s2jh/blob/master/prototype/src/main/resources/context/context-profiles.xml

http://git.oschina.net/xautlx/s2jh/blob/master/prototype/src/main/resources/service/spring-schedule.xml

你可能感兴趣的:(S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序)