1、继承StdSchedulerFactory:
public class SpringSchedulerFactory extends StdSchedulerFactory { public void setConnectionProvider(SpringConnectionProvider connectionProvider){ DBConnectionManager dbMgr = DBConnectionManager.getInstance(); dbMgr.addConnectionProvider(connectionProvider.getDataSourceName(), connectionProvider); } }
2、编写自己的ConnectionProvider:
public class SpringConnectionProvider implements ConnectionProvider { private static final Logger LOG = LoggerFactory.getLogger(SpringConnectionProvider.class); private DataSource dataSource; private String dataSourceName; @Override public Connection getConnection() throws SQLException { return dataSource.getConnection(); } @Override public void shutdown() throws SQLException { LOG.debug("==========do shutdown==========="); dataSource = null; } @Override public void initialize() throws SQLException { LOG.debug("==========do initialize==========="); } /** * @param dataSource the dataSource to set */ public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } /** * @param dataSourceName the dataSourceName to set */ public void setDataSourceName(String dataSourceName) { this.dataSourceName = dataSourceName; } /** * @return the dataSourceName */ public String getDataSourceName() { return dataSourceName; } }
3、编写Spring配置文件:
<bean name="springCollectionProvider" class="xgt.easy.qtz.service.SpringConnectionProvider"> <property name="dataSource" ref="dataSource"></property> <property name="dataSourceName" value="myDataSource"></property> </bean> <bean name="springSchedulerFactory" class="xgt.easy.qtz.service.SpringSchedulerFactory"> <property name="connectionProvider" ref="springCollectionProvider"></property> </bean>
4、quartz.properties配置:
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties:false org.quartz.jobStore.dataSource=myDataSource #org.quartz.dataSource.myDataSource.connectionProvider.class=xgt.easy.qtz.service.ConnectionProviderService #数据库表前缀 org.quartz.jobStore.tablePrefix=QRTZ_ org.quartz.jobStore.isClustered=false
注意:
quartz.properties里面的org.quartz.jobStore.dataSource的值必须配置成和SpringConnectionProvider里面的dataSourceName一样。参见quartz(JobStoreSupport.java)里面获取connection的方法源码如下:
try { conn = DBConnectionManager.getInstance().getConnection( getDataSource()); } catch (SQLException sqle) { throw new JobPersistenceException( "Failed to obtain DB connection from data source '" + getDataSource() + "': " + sqle.toString(), sqle); } catch (Throwable e) { throw new JobPersistenceException( "Failed to obtain DB connection from data source '" + getDataSource() + "': " + e.toString(), e); }
getDataSource():这里获取的dsName就是quartz.properties里面配置的。
public String getDataSource() { return dsName; }