是春季批次的新手。使用spring批处理作业我在postgres db中插入数据然后我收到此错误。如何解决这个问题?
方法org.postgresql.jdbc3.Jdbc3PreparedStatement.setQueryTimeout(int)尚未实现。嵌套异常是java.sql.SQLException:方法org.postgresql.jdbc3.Jdbc3PreparedStatement.setQueryTimeout(int)尚未实现。'
这是我的数据源代码。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- DB connection properties -->
<property name="driverClass" value="${db.driver:oracle.jdbc.OracleDriver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.user:}" />
<property name="password" value="${db.password:}" />
<!-- Pool sizing properties -->
<property name="initialPoolSize" value="${db.pool.initialSize:5}" />
<property name="maxPoolSize" value="${db.pool.maxSize:25}" />
<property name="minPoolSize" value="${db.pool.minSize:0}" />
<property name="maxStatements" value="${db.pool.maxStatements:10}" />
<!-- Connection testing and acquisition properties -->
<property name="maxIdleTime" value="${db.con.maxIdleTime:300}" />
<property name="idleConnectionTestPeriod" value="${db.con.testPeriod:30}" />
<property name="preferredTestQuery" value="${db.con.testQuery:select 1 from dual}" />
<property name="acquireIncrement" value="${db.con.acquireIncrement:5}" />
<property name="acquireRetryAttempts" value="${db.con.retryAttempts:0}" />
<property name="acquireRetryDelay" value="${db.con.retryDelay:3000}" />
<!-- JMX name -->
<property name="dataSourceName" value="Datasource" />
<!-- Debugging options -->
<property name="unreturnedConnectionTimeout" value="${db.con.unreturnedTimeout:0}" />
<property name="debugUnreturnedConnectionStackTraces" value="${db.con.debugUnreturned:false}" />
</bean>
答案 0 :(得分:1)
数据源看起来没问题.... @ duffymo,Oracle驱动程序是默认的,但是如果指定了'db.driver',它将被'db.driver'属性的值覆盖。
某些版本的PostgreSQL驱动程序抛出了setTimeout错误,因为它们实际上没有实现setTimeout,所以他们不希望用户认为setTimeout实际上有任何影响。
您使用的是什么版本的PostreSQL驱动程序?你能分享一下Spring Batch工作的一些细节吗?我不确定如何阻止Spring在PreparedStatement上设置超时。猜测一下,你可以将db.con.unreturnedTimeout设置为0;我认为值可以传递给setTimeout;但我不确定。