java JBoss 7覆盖JNDI数据源
我有一个SpringWeb应用程序,带有Maven 3和数据源/bean,配置用于h2数据库上的本地开发。为了进行测试,存在JBoss AS 7.1服务器
如果我的应用程序部署在JBoss上,是否可以在一个特殊的JBoss XML文件中重写Bean/DataSource,以便在本地(IDE)事务中使用DriverManager数据源(请参阅第一段代码发布)和JndiObjectFactoryBean(第二段)
applicationContext。xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<!-- And so on -->">
<!--GENERAL-->
<context:annotation-config/>
<context:component-scan base-package="com.mysuperapp"/>
<!--DATASOURCES-->
<bean id="activitiDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:file:h2\activiti;MVCC=TRUE"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="hibernateDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:file:h2\hibernate;AUTO_SERVER=TRUE"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<!--TXMANAGEMENT-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="mysuperappPersistenceUnit"/>
<property name="dataSource" ref="hibernateDataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="packagesToScan" value="com.mysuperapp.model"/>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<entry key="hibernate.hbm2ddl.auto" value="update"/>
</map>
</property>
</bean>
<!-- And so on -->
自定义应用程序上下文。JBoss的xml数据源
<bean id="activitiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:jboss/datasources/activitiDataSource"/>
</bean>
<bean id="hibernateDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:jboss/datasources/hibernateDataSource"/>
</bean>
非常感谢您的帮助
# 1 楼答案
我设法用SVN补丁做到了这一点,它是在自动部署之前添加的。它更改了数据源定义
使用windows创建修补程序并在linux下使用/usr/bin/patch应用修补程序时请注意(CR+LF问题,将dos2unix文件名应用于修补程序和要修补的文件)
# 2 楼答案
正如我在配置中看到的那样,应用程序自己创建数据库连接
您可以在应用服务器上定义数据源,并通过jndi查找来获取数据源,而不必这样做。因此,您可以分别为每个系统配置数据库连接
# 3 楼答案
您的JBoss有一个文件
<jboss_home>/standalone/configuration/standalone.xml
,如果您不提供其他文件,可以使用该文件出于测试目的,您可以尝试在同一目录中复制该文件,例如将其命名为
test.xml
,并在其中添加数据源定义。然后通过使用standalone.bat server-config=test
或standalone.bat -c test
启动JBoss来使用它