简体   繁体   English

如何允许访问底层连接?

[英]How to allow access to Underlying Connection?

I have defined a datasource in my baseContext.xml 我在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>

This datasource is writing a clob value to a oracle db. 该数据源正在将Clob值写入oracle数据库。 And while doing so it throws this error 并且这样做时会引发此错误

org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [org.apache.commons.dbcp.PoolableConnection]:specify a corresponding NativeJdbcExtractor; org.springframework.dao.InvalidDataAccessApiUsageException:OracleLobCreator需要在[oracle.jdbc.OracleConnection]上工作,而不是在[org.apache.commons.dbcp.PoolableConnection]上工作:指定相应的NativeJdbcExtractor; nested exception is java.lang.ClassCastException: org.apache.commons.dbcp.PoolableConnection cannot be cast to oracle.jdbc.OracleConnection 嵌套的异常是java.lang.ClassCastException:org.apache.commons.dbcp.PoolableConnection无法强制转换为oracle.jdbc.OracleConnection

I tried to set this property "accessToUnderlyingConnectionAllowed" as true but it said cannot instantiate the bean, property does not exist. 我试图将此属性“ accessToUnderlyingConnectionAllowed”设置为true,但它说无法实例化bean,该属性不存在。

Other solutions like this asked to use native jdbc extractor but i dont know how to specify that in this bean 像这样的其他解决方案要求使用本机jdbc提取器,但我不知道如何在此bean中指定它

I am using Spring Batch running on tomcat and i just specify this datasource when i configure the JobRepository 我正在使用在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>

How can i solve this issue? 我该如何解决这个问题?

You can set the lobHandler in the jobRepository FOr example: 您可以在jobRepository FOr示例中设置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>

I hope it can be useful 我希望它会有用

Angelo 安杰洛

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM