如何为多个数据库配置JNDI连接池?

时间:2013-11-17 17:08:08

标签: java jdbc jndi connection-pooling deployment-descriptor

我有一个数据库JNDI连接池设置 context.xml JNDI资源和web.xml env-ref和初始上下文。它运作良好。但我需要为我的应用程序再构建两个数据库。

那么我是否必须分别配置两个JNDI资源和env-ref以及初始上下文?或者三个数据库的env-ref相同?

为多个数据库构建连接池的有效方法是什么?请指教。

1 个答案:

答案 0 :(得分:2)

您必须单独配置JNDI资源。 web.xml 中唯一没有<env-ref>元素的元素,只有<resource-env-ref><resource-ref>元素。

要使用更多数据库,您必须为每个资源进行以下附加配置

  1. context.xml 文件
  2. 中添加新的<Resource>
  3. web.xml 文件中添加新的<resource-ref><resource-env-ref>
  4. 注意:
    如果使用@Resource注释,则不再需要在部署描述符( web.xml )中定义新资源。此批注等同于声明 resource-ref message-destination-ref env-ref resource-env-部署描述符中的ref 元素。

    因此,您必须DataSource单独查找每个 InitialContext(您可以查找所需的DataSource一次,然后只使用相同的实例)。


    实施例

    以下是从我的一个项目配置两个MySQL数据库的示例。一个数据库使用The Tomcat JDBC Connection Pool配置,另一个数据库没有连接池(您可以根据需要/需要这样做)。

    context.xml (位于/ META-INF目录中):

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <!-- Configuration for primary DB -->
        <Resource   name="jdbc/TestShopDB"
                    type="javax.sql.DataSource"
                    auth="Container"
                    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
                    driverClassName="com.mysql.jdbc.Driver"
                    url="jdbc:mysql://localhost:3306/test_shop"
                    username="root"
                    password="mysql"
                    maxActive="100"
                    minIdle="10"
                    initialSize="10"
                    validatonQuery="SELECT 1"
                    validationInterval="30000"
                    removeAbandoned="true"
                    removeAbandonedTimeout="60"
                    abandonWhenPercentageFull="50"
                    closeMethod="close"/>
    
        <!-- Configuration for administration DB -->            
        <Resource   name="jdbc/TestShopAdminDB"
                    type="javax.sql.DataSource"
                    auth="Container"
                    driverClassName="com.mysql.jdbc.Driver"
                    url="jdbc:mysql://localhost:3306/test_shop_admin"
                    username="root"
                    password="mysql"/>      
    </Context>
    


    web.xml (位于/ WEB-INF目录中;为简洁起见,省略了不相关的部分):

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://java.sun.com/xml/ns/javaee"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
            version="3.0">
    
        ...
    
        <!-- Configuration for primary DB -->
        <resource-ref>
            <res-ref-name>jdbc/TestShopDB</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    
        <!-- Configuration for administration DB -->
        <resource-ref>
            <res-ref-name>jdbc/TestShopAdminDB</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    
        ...
    
    </web-app>
    

    补充阅读