当前位置:编程学习 > JAVA >>

Spring quartz的集成配置中quartz.properties中的dataSource用Spring中的数据源?


Spring中配置:
<bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> 
<!-- Connection Info -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.0.54:1521:orcl" />
<property name="username" value="orawms" />
<property name="password" value="orawms" />  
</bena>
<!-- 启动 spring 定时器  -->
<bean id="scheduleReportFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<property name="configLocation" value="classpath:quartz.properties" /> 
</bean>

quartz.properties配置:
org.quartz.jobStore.dataSource = myDS 
org.quartz.dataSource.myDS.driver=oracle.jdbc.driver.OracleDriver  
org.quartz.dataSource.myDS.URL=jdbc:oracle:thin:@192.168.200.151:1521:orawms
org.quartz.dataSource.myDS.user=orawms 
org.quartz.dataSource.myDS.password=orawms 
现在我不想用quartz.properties中的数据配置,如何配置让quartz.properties用Spring中的DataSource spring quartz --------------------编程问答-------------------- 用不了。xml能使用properties文件,是因为properties文件的内容是键值对。 --------------------编程问答-------------------- --------------------编程问答-------------------- 搞了一个下午终于弄出来了呵

Spring中这样配置:
<bean id="quartzdataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> 
<!-- Connection Info -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.0.44:1521:orcl" />
<property name="username" value="orawms" />
<property name="password" value="orawms" />
</bean>
<bean id="scheduleReportFactory"
 class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource">    
            <ref bean="quartzdataSource" /> <!--Spring中对于的数据源-->   
        </property>     <property name="startupDelay" value="100"/>
 <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
 <property name="configLocation" value="classpath:quartz.properties" /> 
 </bean>

配置好数据源dataSource后,需要在Quartz的QRTZ_LOCKS表中插入以下数据:
INSERT INTO QRTZ_LOCKS values('TRIGGER_ACCESS');
INSERT INTO QRTZ_LOCKS values('JOB_ACCESS');
否则会报
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduler' defined in file [...\webapps\WEB-INF\classes\config\applicationContext-quartz.xml]: Invocation of init method failed; nested exception is org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: No row exists in table QRTZ_LOCKS for lock named: TRIGGER_ACCESS [See nested exception: java.sql.SQLException: No row exists in table QRTZ_LOCKS for lock named: TRIGGER_ACCESS]]异常

●dataSource:当需要使用数据库来持久化任务调度数据时,你可以在Quartz中配置数据源,也可以直接在Spring中通过dataSource指定一个Spring管理的数据源。如果指定了该属性,即使quartz.properties中已经定义了数据源,也会被此dataSource覆盖;
  --------------------编程问答-------------------- qrtz_triggers qrtz_job_details  qrtz_simple_triggers
这几张表在数据库是怎么配置的?为什么我配置了,调不起来自己的bean呢。但数据库是在轮转的 --------------------编程问答-------------------- 为什么我照着你得配置,还是无法找到数据源呢 --------------------编程问答--------------------
引用 5 楼 warpten2011 的回复:
为什么我照着你得配置,还是无法找到数据源呢

你要实现什么功能,是不是其他配置文件的问题呢?我这个方案是可以行的通的。我已经跑起来了!
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,