Я только что обновил зависимости Spring / SpringBoot и заметил, что у класса JdbcTemplate больше нет свойства "nativeJdbcExtractor".
Мне удалось найти детали и справочную информацию:
https://jira.spring.io/browse/SPR-14670
Однако я не смог найти замену конфигурации. Я использую библиотеку commons-dbcp и классы Spring, такие как SimpleJdbcCall и т. Д. Я никогда не имею дело с низкоуровневым API JDBC, однако, если код поставщика требует своего реального Тип соединения (Oracle), настройки nativeJdbcExtractor гарантированно получит его где-то глубоко в коде Spring JDBC (не в моем коде приложения). Я не уверен, как мне решить эту проблему, вызвав connection.unwrap () , если мне нужно, чтобы Spring API обрабатывал это автоматически, как это делалось в прошлом.
java.lang.ClassCastException: org.apache.commons.dbcp2.PoolingDataSource $ PoolGuardConnectionWrapper нельзя привести к oracle.jdbc.OracleConnection
Это скрыто где-то в конфигурации источника данных? Я обновился с commons-dbcp 1.4 до commons-dbcp2, но пока не могу найти ничего полезного (BasicDataSource).
Обновление: Следующий поток актуален, но я не могу переварить искомый ответ, так как объект Connection получен в классе JdbcTemplate и, таким образом, вне моего контроля.
замена для jdbc.support.nativejdbc удалить весной 5
Обновление № 2 - трассировка стека
Caused by: java.lang.ClassCastException: org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.TypeDescriptor.setPhysicalConnectionOf(TypeDescriptor.java:832)
at oracle.sql.TypeDescriptor.<init>(TypeDescriptor.java:586)
at oracle.sql.ArrayDescriptor.<init>(ArrayDescriptor.java:224)
at org.springframework.data.jdbc.support.oracle.SqlArrayValue.createTypeValue(SqlArrayValue.java:90)
at org.springframework.jdbc.core.support.AbstractSqlTypeValue.setTypeValue(AbstractSqlTypeValue.java:60)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:293)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147)
at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:200)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1048)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1104)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:414)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:397)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:193)
Обновление № 3 - код, выполняющий приведение (Oracle JDBC)
public void setPhysicalConnectionOf(Connection var1) {
this.connection = ((oracle.jdbc.OracleConnection)var1).physicalConnectionWithin();
}