我有一个数据库JNDI连接池设置 context.xml JNDI资源和web.xml env-ref和初始上下文。它运作良好。但我需要为我的应用程序再构建两个数据库。
那么我是否必须分别配置两个JNDI资源和env-ref以及初始上下文?或者三个数据库的env-ref相同?
为多个数据库构建连接池的有效方法是什么?请指教。
答案 0 :(得分:2)
您必须单独配置JNDI资源。 web.xml 中唯一没有<env-ref>
元素的元素,只有<resource-env-ref>
和<resource-ref>
元素。
要使用更多数据库,您必须为每个资源进行以下附加配置:
<Resource>
<resource-ref>
或<resource-env-ref>
注意:
如果使用@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>