為什麼使用NativeJdbcExtractor
Sometimes you need to access vendor specific JDBC methods that differ from the standard JDBC API. This can be problematic if you are running in an application server or with a DataSource
that
wraps the Connection
, Statement
and ResultSet
objects
with its own wrapper objects. To gain access to the native objects you can configure yourJdbcTemplate
or OracleLobHandler
with
a NativeJdbcExtractor
.
翻譯:
有時候,你需要訪問特定於供應商的JDBC方法不同於標準JDBC API。這可能會出現問題,如果你正在執行一個應用程式伺服器或一個DataSource包裝的連線,Statement和ResultSet物件與自己的包裝物件。要獲得本地物件,你可以配置你JdbcTemplate或OracleLobHandler的一個NativeJdbcExtractor。
The NativeJdbcExtractor
comes
in a variety of flavors to match your execution environment:
-
SimpleNativeJdbcExtractor
-
C3P0NativeJdbcExtractor
-
CommonsDbcpNativeJdbcExtractor
-
JBossNativeJdbcExtractor
-
WebLogicNativeJdbcExtractor
-
WebSphereNativeJdbcExtractor
-
XAPoolNativeJdbcExtractor
Usually the SimpleNativeJdbcExtractor
is
sufficient for unwrapping a Connection
object in most environments. See the Javadocs for more
details.
spring 配置檔案如下:
<!-- nativeJdbcExtractor 和 oracleLobHandler Bean 都設定為 lazy-init="true",這是因為 -->
<!-- nativeJdbcExtractor 需要通過執行期的反射機制獲取底層的 JDBC 物件, -->
<!-- 所以需要避免在 Spring 容器啟動時就例項化這兩個Bean。 -->
<bean id="nativeJdbcExtractor"class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" lazy-init="true" />
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"></property>
</bean>
<!-- 我的實現類,因為我用的是C3P0 連線池方式,配置的nativejdbcextractor是C3P0 。 -->
<bean id="simpleWriterBlob" class="com.ww.jdbc.writer.blob.SimpleWriterBlob">
<property name="dataSource" ref="dataSource"></property>
<property name="lobHandler" ref="oracleLobHandler"></property>
</bean>
------------另一篇轉載----------------------------------
近來對一個專案進行維護
發現其之前用的是WebSphere,我準備將其更改到Tomcat上
於是悲劇開始上演。各種配置,各種報錯。
createBeanException
原來是使用的WebSphereNativeJdbcExtractor現改為其它連線方式,則需要更改。
詳細參考:
在spring裡 插入 BLOB欄位
kp.setContent(content.getBytes());
方法 :hibernate saveOrUpdate
報
Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB。
使用tomcat 沒問題。
可伺服器改為 WebSphere .就報錯。
把Spring內建提供的NativeJdbcExtractor轉換器 改了一下,結果:問題解決。
———————————————————————————————————————————————————————
總結如下:
1、對於我們的工程:
在釋出環境中,要將nativeJdbcExtractor 換成 org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor
留意log4j日誌,此時的blob欄位的java型別為oracle.sql.Blob
2、Spring內建提供的NativeJdbcExtractor轉換器有:
C3P0NativeJdbcExtractor
CommonsDbcpNativeJdbcExtractor
JBossNativeJdbcExtractor
NativeJdbcExtractor
NativeJdbcExtractorAdapter
SimpleNativeJdbcExtractor
WebLogicNativeJdbcExtractor
WebSphereNativeJdbcExtractor
XAPoolNativeJdbcExtractor
要根據不同伺服器及時修改,以免浪費大量時間。
位於org\springframework\jdbc\support\nativejdbc下
相關文章
- 為什麼使用Sails?AI
- 什麼是Docker?為什麼使用docker?Docker
- 什麼是介面?為什麼使用介面? 什麼時候使用介面?(轉)
- TypeScript是什麼,為什麼要使用它?TypeScript
- Flutter為什麼使用Dart?FlutterDart
- 為什麼要使用 Redis?Redis
- 我為什麼使用 JavaJava
- 為什麼使用PythonPython
- 為什麼要使用promisePromise
- 為什麼要使用框架框架
- 為什麼要使用Docker?Docker
- 為什麼要使用EntityBeanBean
- 為什麼使用API?什麼情況下避免使用API?API
- 公司為什麼要使用OKR,目的是什麼?OKR
- 什麼是Nginx?Linux為什麼使用Nginx?NginxLinux
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- 什麼是行為資料?企業為什麼要使用它?
- 為什麼要使用微服務微服務
- [譯] Robinhood 為什麼使用 AirflowAI
- 為什麼要使用代理池?
- 為什麼選擇使用Rust?Rust
- 我為什麼要使用Webpack?Web
- 為什麼要使用代理模式模式
- 為什麼要使用pl/sqlSQL
- 為什麼要使用模組模式?模式
- GC是什麼?為什麼我們要去使用它GC
- 什麼是Web快取,為什麼要使用它Web快取
- 什麼是 WireGuard?為什麼 Linux 使用者為它瘋狂?Linux
- 什麼是MongoDB?Python爬蟲為什麼使用MongoDB?MongoDBPython爬蟲
- 什麼是內網穿透?為什麼使用內網穿透?內網穿透
- Python 集合是什麼,為什麼應該使用以及如何使用?Python
- 為什麼要使用Node.JSNode.js
- 為什麼要使用CRM系統?
- 為什麼要使用 Node.jsNode.js
- 為什麼我還在使用JavaEE?Java
- 【React】為什麼我不再使用setState?React
- 為什麼使用Object.prototype.hasOwnPropertyObject
- 為什麼我不再使用MVC框架?MVC框架