2017-01-27 2 views
0

Ich habe eine Datenquelle in meinem baseContext.xmlWie erlaube ich den Zugang zu Underlying Connection?

<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> 

Diese Datenquelle schreibt einen clob Wert auf eine Oracle-Datenbank definiert. Und während Dabei wirft er diese Fehler

org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator auf [oracle.jdbc.OracleConnection] arbeiten muss, nicht auf [org.apache.commons.dbcp.PoolableConnection] : Spezifizieren Sie einen entsprechenden NativeJdbcExtractor; verschachtelte Ausnahme ist java.lang.ClassCastException: org.apache.commons.dbcp.PoolableConnection nicht zu gieße oracle.jdbc.OracleConnection werden kann

Ich habe versucht, diese Eigenschaft einzustellen „accessToUnderlyingConnectionAllowed“ als wahr, aber es besagt, dass die Bohne nicht instanziiert werden kann, Eigenschaft existiert nicht.

Andere Lösungen like this gefragt nativen jdbc Extraktor zu verwenden, aber ich weiß nicht, wie das

in diesem Bean angeben

I Spring Batch bin mit tomcat läuft auf und i geben gerade diese Datenquelle, wenn ich die JobRepository konfigurieren

<batch:job-repository data-source="datasource" id="jobrepo" transaction-manager="transacMnager" table-prefix="" isolation-level-for-create="READ_COMMITTED"></batch:job-repository> 

Wie kann ich dieses Problem lösen?

+0

haben Sie versuchen, diese Methode zu verwenden: https: // commons .apache.org/proper/commons-dbcp/api-1.4/org/apache/commons/dbcp/Basisdatenquelle.html # getConnection()? –

+0

Ich benutze Spring Batch und ich zeige nur auf diese Datenquelle, wenn ich das JobRepository angeben, im Wesentlichen habe ich keinen entsprechenden Java-Code, wenn ich explizit die Verbindung bekomme, das Spring Batch Framework tut das. Also jede Konfiguration, die ich tun muss, wäre hier, der Ort, an dem ich die Datenquelle beangeben –

Antwort

1

Sie können die lobHandler im jobRepository zum Beispiel ein:

<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> 

Ich hoffe, dass es

nützlich sein kann

Angelo

+0

Ich musste auch "allowAccessToUnderlyingConnection" als wahr festlegen, wenn Sie die Datenquelle definieren. Danke für die Hilfe :) –

Verwandte Themen