2011-05-19 69 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 
    >