我有一个springweb应用程序,它带有maven 3和为h2数据库上的本地开发配置的数据源/bean。为了进行测试,存在一个jbossas7.1服务器。
如果我的应用程序部署在jboss上,是否可以重写特殊jboss xml文件中的bean/datasource,以便在本地(ide)事务中使用drivermanagerdatasource(参见第一个代码发布)和jndiobjectfactorybean(第二个)?
应用程序上下文.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的自定义applicationcontext.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>
非常感谢您的帮助。
3条答案
按热度按时间pieyvz9o1#
我用一个svn补丁实现了这一点,它是在自动部署之前添加的。它会更改数据源定义。
使用windows创建补丁和在linux下使用/usr/bin/patch应用时要注意(cr+lf问题,对补丁和要修补的文件都应用dos2unix文件名)。
bfhwhh0e2#
正如我在配置文件中看到的那样,应用程序自己创建数据库连接。
您可以在app服务器上定义数据源并通过jndi查找来获取数据源,而不必这样做。因此,可以分别为每个系统配置数据库连接。
5w9g7ksd3#
你的jboss有一个文件
<jboss_home>/standalone/configuration/standalone.xml
如果不提供不同的,则使用。出于测试目的,您可以尝试在同一目录中复制该文件,例如命名它
test.xml
并在那里添加数据源定义。然后通过启动jboss来使用它standalone.bat --server-config=test
或者standalone.bat -c test
.