2011-05-19 72 views
3

我正在爲我的應用程序創建一系列Web服務,我需要根據作爲web服務調用中的參數傳遞的serviceCode訪問其他數據庫。在Tomcat中使用動態數據源

我的設置與Tomcat的基本資源來訪問數據庫這樣

<Resource name="jdbc/db_name" auth="Container" type="javax.sql.DataSource" 
maxActive="100" maxIdle="30" maxWait="10000" 
username="user" password="pass" driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://server_ip:3306/db_name"/> 

但這種方式我必須設置爲每一個數據庫中,我在服務器上創建,我想要的資源,那我沒有找到信息(或不明白),是爲了能夠將db_name設置爲從webservice在運行時傳遞的變量,所以基本上只有一個資源並且使用它而不是爲每個數據庫提供資源(這將需要我每次創建新數據庫時啓動服務器以更改context.xml)

I acce SS使用scalaquery這樣

val db = Database.forDataSource(datasource("jdbc/db_name")) 

而這正是我希望能夠到dinamically通過DB_NAME,或在運行時定義資源點的資源,有沒有使用Tomcat /斯卡拉的另一種方式還是我每次都被迫添加資源?

回答

4

定義您自己的資源。請參閱Tomcat文檔。您提供了一個javax.naming.spi.ObjectFactory的實現。讓它返回一個適當的Context實現,以便通過某個名稱查找它返回到該名稱的數據庫連接。在我的情況下,context.xml中的所需條目如下所示:

<Resource 
    name="ldap/Context" // your name, probably something like jdbc/dynamic 
    auth="Container" 
    type="javax.naming.ldap.LdapContext" 
    factory="com.xxxx.ldap.LdapContextFactory" 
    // your initialization params here, if any 
    >