2017-07-19 94 views
0

當我連接到我的mysql數據庫時,我的Web應用程序試圖獲取MysqlDataDatasource。我的應用程序託管在Apache Tomcat 8.5網絡服務器上。當嘗試從Tomcat獲取MysqlDatasource時出現ClassCastException BasicDataSource

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource 
cannot be cast to com.mysql.jdbc.jdbc2.optional.MysqlDataSource 

這裏就是投失敗行:

然而,當我試圖從我的context.lookup投它拋出這個ClassCastException異常

MysqlDatasource mysql_datasource = 
    (MysqlDataSource) context.lookup("java:/comp/env/jdbc/MySQLDataSource"); 

這是我的context.xml配置:

<Resource name="jdbc/MySQLDataSource" auth="Container" type="javax.sql.DataSource" 
    username="root" password="password" maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/pododdle"/> 

這是我的web.xml配置:

<resource-ref> 
    <description>Pododdle DB Connection</description> 
    <res-ref-name>jdbc/MySQLDataSource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

任何人都知道問題是什麼在這裏,我怎麼能得到我的手這一切都重要,最難以捉摸的com.mysql.jdbc.jdbc2.optional.MysqlDataSource?所有幫助非常感謝!

PS:以前我是主辦我的應用程序在GlassFish 4服務器上,並用下面的代碼來獲取MysqlDatasource:

Datasource datasource = (DataSource) context.lookup("jdbc/MySQLDataSource"); 
MysqlDataSource mysql_datasource = datasource.unwrap(MysqlDataSource.class); 

回答

2

大約有tomcat8方面的一些文檔。 tomcat默認使用Apache Commons DBCP池。

因此,當您在tomcat中調用context.lookup("jdbc/MySQLDataSource")時,默認會返回BasicDataSource,無法直接將其轉換爲MysqlDataSource。 。

,如果你想獲得一個MysqlDataSource這將是工作(添加複製名/密碼/ URL的方法......你的目標DataSource和它的newInstance)

void yourmethod(){ 
    //... 
    BasicDataSource ds = (BasicDataSource)context.lookup("jdbc/MySQLDataSource"); 
    MysqlDataSource mysqlDs = unwrap(ds); 
    //... 
} 

protected MysqlDataSource unwrap(BasicDataSource ds){ 
    MysqlDataSource mysqlDs = new MysqlDataSource(); 
    mysqlDs.setUser(ds.getUsername()); 
    mysqlDs.setPassword(ds.getPassword()); 
    mysqlDs.setURL(ds.getUrl()); 
    // copy more properties 
    return mysqlDs; 
} 
+0

乾杯4myself - 刪除了前一關於一個迅速解決的問題的評論。感謝一百萬我的好先生/女士!湯姆 –

相關問題