spring 批处理 oracle CLOB 问题

spring batch oracle CLOB issue

我们正在使用 spring 批处理,它确实将一些数据作为 CLOB 对象插入到它的某些 table 中。我们有 oracle db 并使用 apache commons dbcp 连接池。但是当我们 运行 我们的工作时,它会抛出如下异常。这个问题的根本原因是什么?是 apache 公共连接池中的问题吗?

Caused by: java.lang.ClassCastException: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.CLOB.createTemporary(CLOB.java:979)
at oracle.sql.CLOB.createTemporary(CLOB.java:939)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:580)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:527)
... 66 more

我遇到了类似的问题。配置 LOB 处理程序解决了我的问题。请在下面找到代码

<batch:job-repository data-source="dataSource" id="jobRepository"
    isolation-level-for-create="READ_COMMITTED" transaction-manager="transactionManager"
    table-prefix="${batch.table.prefix}" lob-handler="lobHandler" />

 <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>

     <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
    </bean>