【问题标题】:How to allow access to Underlying Connection?如何允许访问基础连接?
【发布时间】:2017-06-12 19:49:16
【问题描述】:

我在我的 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 数据库。这样做会引发此错误

org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator 需要在 [oracle.jdbc.OracleConnection] 上工作,而不是 在 [org.apache.commons.dbcp.PoolableConnection] 上:指定一个 对应的 NativeJdbcExtractor;嵌套异常是 java.lang.ClassCastException: org.apache.commons.dbcp.PoolableConnection 不能转换为 oracle.jdbc.OracleConnection

我尝试将此属性 "accessToUnderlyingConnectionAllowed" 设置为 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>

我该如何解决这个问题?

【问题讨论】:

  • 我正在使用 Spring Batch,当我指定 JobRepository 时,我只是指向这个数据源,本质上,当我显式获取连接时,我没有相应的 java 代码,Spring Batch Framework 做到了。所以我需要做的任何配置都在这里,我指定数据源bean的地方

标签: java spring tomcat spring-batch


【解决方案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>

希望对你有用

安杰洛

【讨论】:

  • 我还必须在定义数据源时将“allowAccessToUnderlyingConnection”设置为 true。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2011-03-17
  • 2018-04-02
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
相关资源
最近更新 更多