我在baseContext.xml中定义了一个数据源
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="default" autowire="default" autowire-candidate="default">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value=""></property>
<property name="username" value=""></property>
<property name="password" value=""></property>
<property name="testWhileIdle" value=""></property>
<property name="testOnBorrow" value="tue"></property>
<property name="validationQuery" value=""></property>
</bean>
此数据源正在将clob值写入oracle db。虽然这样做会引发此错误
org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator需要在[oracle.jdbc.OracleConnection]上工作,而不是 on [org.apache.commons.dbcp.PoolableConnection]:指定一个 对应的NativeJdbcExtractor;嵌套异常是 java.lang.ClassCastException: org.apache.commons.dbcp.PoolableConnection无法转换为 oracle.jdbc.OracleConnection
我尝试将此属性&#34; accessToUnderlyingConnectionAllowed&#34; 设置为true,但它表示无法实例化bean,属性不存在。
其他解决方案like this要求使用本机jdbc提取器,但我不知道如何在此bean中指定
我在tomcat上运行Spring Batch,我在配置JobRepository时只指定了这个数据源
<batch:job-repository data-source="datasource" id="jobrepo" transaction-manager="transacMnager" table-prefix="" isolation-level-for-create="READ_COMMITTED"></batch:job-repository>
我该如何解决这个问题?
答案 0 :(得分:1)
您可以在jobRepository中设置lobHandler 例如:
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transacMnager" />
<property name="isolationLevelForCreate" value="READ_COMMITTED" />
<property name="lobHandler">
<bean class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<bean class="yourCorrectJdbcExtractor" />
</property>
</bean>
</property>
</bean>
我希望它有用
安吉洛