1

我想知道是否可以共享一个数据库连接池 bean(由 Spring 设置)并在部署在 JBoss 中的两个 WAR 之间共享它。

例如,我想要这样的东西:database-pool.xml

    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/>

WAR app1 的 applicationContext.xml:

    <import resource="database-pool.xml"/>
    <bean id="someBean1">
        <property name="datasource" ref="datasource"/>
    </bean>

WAR app2 的 applicationContext.xml:

    <import resource="database-pool.xml"/>
    <bean id="someBean2">
        <property name="datasource" ref="datasource"/>
    </bean>

我的最终目标是拥有数据库连接池的单个实例。这可行吗?

4

1 回答 1

1

我认为如果您使用应用程序本地数据源,这将很难(如果不是不可能的话)。但是,如果您在容器上安装数据源,则可以共享它(请参阅第 17 章。数据源配置 - JBoss 5 参考)。容器数据源将有一个 JNDI 名称,您可以使用<jee:jndi-lookup>标记将其注入 Spring 容器:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>

JNDI 数据源不仅可以通过管理方式(管理控制台)进行部署,还可以通过编程方式进行部署。在 Spring 容器初始化中,每场战争都可能具有以下代码逻辑:

  1. 检查是否存在 JNDI 名称为“jdbc/MyDatasource”的数据源。
  2. 如果不存在,则创建一个并部署。
  3. 如果存在,只需获取引用,将其放入 Spring 容器中。

然而,这种方法的弱点是,如果您以后必须更改数据源属性(服务器 ip / 数据库名称),则必须更新和重新编译每一次战争。

在这方面,使用管理控制台在容器上配置数据源是一种更流行的方法。

于 2013-07-01T01:47:47.417 回答