我有一个Spring Web应用程序,其中包含Maven 3和数据源/ Bean,用于在h2数据库上进行本地开发。对于测试,存在JBoss AS 7.1服务器。
是否可以覆盖特殊JBoss XML-File中的Bean / DataSource,以便本地(IDE)使用DriverManagerDataSource(参见第一个代码发布)和JndiObjectFactoryBean(第二个),如果我的应用程序部署在JBoss上?
的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的自定义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>
非常感谢任何帮助。
答案 0 :(得分:1)
您的应用程序会自行创建数据库连接,我可以在您的配置中看到。
您可以在app-server上定义数据源,然后通过jndi查找获取数据源,而不是这样做。因此,您可以单独为每个系统配置数据库连接。
<!-- DataSource-LookUp -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
<property name="jndiName" value="java:jboss/datasources/MyDataSourceDS" />
<property name="resourceRef" value="true" />
</bean>
答案 1 :(得分:0)
您的JBoss有一个文件<jboss_home>/standalone/configuration/standalone.xml
,如果您不提供另一个文件,则会使用该文件。
出于测试目的,您可以尝试在同一目录中制作该文件的副本,例如命名为test.xml
并在那里添加数据源定义。然后通过使用standalone.bat --server-config=test
或standalone.bat -c test
答案 2 :(得分:0)
我设法使用SVN补丁执行此操作,该补丁在自动部署之前添加。它会更改DataSource定义。
在使用windows创建补丁并在linux下使用/ usr / bin / patch时应注意(CR + LF问题,将dos2unix文件名应用于补丁和要修补的文件)。