我想知道是否可以共享数据库连接池bean(由Spring设置)并在JBoss中部署的两个WAR之间共享它。
例如,我想要这样的事情: 数据库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>
我的最终目标是拥有数据库连接池的单个实例。那可行吗?
答案 0 :(得分:1)
我认为如果你使用app-local数据源会很难(如果不是不可能的话)。但是,如果在容器上安装数据源,则可以共享它(请参阅Chapter 17. Datasource Configuration -- JBoss 5 reference)。容器数据源将具有JNDI名称,您可以使用<jee:jndi-lookup>
标记将其注入Spring容器:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>
JNDI数据源不仅可以在管理上(管理控制台)进行部署,还可以进行编程。每个war都可以在Spring容器初始化时使用以下代码逻辑:
然而,这种方法的缺点是,如果您将来必须更改数据源属性(服务器IP /数据库名称),则必须更新并重新编译每次单独的战争。
在这方面,使用管理控制台在容器上配置数据源是一种更受欢迎的方法。