Использование динамического источника данных с Tomcat - PullRequest
4 голосов
/ 19 мая 2011

Я создаю серию веб-сервисов для своего приложения, и мне нужно получить доступ к другой базе данных на основе 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 в качестве переменной, которая передается во время выполнения из веб-службы, поэтому в основном иметь только один ресурс и использовать его динамически, вместо того, чтобы иметь ресурс для каждой базы данных (что потребовало бы от меня запускасервер для изменения context.xml каждый раз, когда я создаю новую базу данных)

Я получаю доступ к ресурсу с помощью скалярного запроса, подобного этому

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

, и это тот момент, когда я хотел иметь возможностьдинамически передать db_name или определить ресурс во время выполнения, есть ли альтернативный способ с tomcat / scalaили я вынужден добавлять ресурс каждый раз?

1 Ответ

4 голосов
/ 20 мая 2011

Определите свой собственный ресурс. Смотрите документацию 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
    >
...