加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在Tomcat中使用动态数据源

发布时间:2020-12-16 09:23:47 所属栏目:安全 来源:网络整理
导读:我正在为我的应用程序创建一系列web服务,我需要根据在webservice调用中作为参数传递的serviceCode访问不同的数据库. 我用tomcat设置了一个基本资源来访问这样的数据库 Resource name="jdbc/db_name" auth="Container" type="javax.sql.DataSource"maxActive=
我正在为我的应用程序创建一系列web服务,我需要根据在webservice调用中作为参数传递的serviceCode访问不同的数据库.

我用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)

我使用scalaquery这样访问资源

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

这就是我希望能够以动态方式传递db_name,或者在运行时定义资源的地方,是否存在使用tomcat / scala的替代方法,或者我每次都被迫添加资源?

解决方法

定义自己的资源.请参阅Tomcat文档.您提供了javax.naming.spi.ObjectFactory的实现.让它返回适当的Context实现,以便通过某个名称查找它返回与该名称的DB连接.在我的例子中,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
    >

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读