[英]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.