首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在一个Spring配置中配置两个DataSoure吗?

可以在一个Spring配置中配置两个DataSoure吗?
EN

Stack Overflow用户
提问于 2014-02-21 15:27:56
回答 3查看 357关注 0票数 0

我正在开发一个web应用程序,我需要两个DataSource来连接两个不同的数据库,根据我的requirement.One,DataSource将使用Spring + JPA框架,另一个DataSource将使用Spring + MyBatis框架。

EN

回答 3

Stack Overflow用户

发布于 2014-02-21 15:52:30

是的,我建议你既可以从spring管理,也可以从applicationContext获得。

代码语言:javascript
复制
<bean class="org.apache.tomcat.jdbc.pool.DataSource" id="dataSource" >
        <property name="driverClassName" value="${database.driverClassName}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="${database.username}"/>
        <property name="password" value="${database.password}"/>

代码语言:javascript
复制
   <bean class="org.apache.tomcat.jdbc.pool.DataSource" id="dataSourceOrderDetail" >
        <property name="driverClassName" value="${database.driverClassName}"/>
        <property name="url" value="${database.url.orderdetail}"/>
        <property name="username" value="${database.username}"/>
        <property name="password" value="${database.password}"/>
  </bean>

只需要有不同的id名称,才能正确注入

检查this,查看如何将spring与ibatis集成,然后使用数据源bean配置bean

或者,如果您想使用datasource-ds.xml,只需将这两个数据源xml文件放在应用程序上下文中的lib文件夹中(如果您使用的是jboss或tomcat )。

更新

代码语言:javascript
复制
<jpa:repositories base-package="com.staples.sa.pricemart.repository.pag"
    entity-manager-factory-ref="entityManagerFactory" />

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <qualifier value="pagTransactionManager" />
</bean>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="dataSource" ref="dataSource" />
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
    </property>
</bean>
代码语言:javascript
复制
<jpa:repositories base-package="com.staples.sa.pricemart.repository.orderdetail"
    entity-manager-factory-ref="entityManagerFactoryOrderDetail" />


<bean id="transactionManagerOrderDetail" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactoryOrderDetail" />
    <qualifier value="orderDetailTX" />
</bean>


<bean
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactoryOrderDetail">
    <property name="persistenceUnitName" value="persistenceUnitOrderDetail" />
    <property name="dataSource" ref="dataSourceOrderDetail" />
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
    </property>
</bean>

<!-- -->

Persistence.xml需要如下所示。(需要完成xml配置)

代码语言:javascript
复制
<persistence-unit name="persistenceUnit"
        transaction-type="RESOURCE_LOCAL">

代码语言:javascript
复制
<!-- Add the persistence context for OrderDetail -->
<persistence-unit name="persistenceUnitOrderDetail"
    transaction-type="RESOURCE_LOCAL">
票数 1
EN

Stack Overflow用户

发布于 2016-06-21 14:31:35

以下是为您提供的示例代码

代码语言:javascript
复制
class Main {
  public static void main(String args[]) throws Exception {
    ApplicationContext ac = new ClassPathXmlApplicationContext("context.xml", Main.class);
    DataSource dataSource = (DataSource) ac.getBean("dataSource");
    DataSource mysqlDataSource = (DataSource) ac.getBean("mysqlDataSource");

Context.xml

代码语言:javascript
复制
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://dbhost-prospring-psql/prospring"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
    <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>

<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>
票数 1
EN

Stack Overflow用户

发布于 2014-02-24 22:47:18

通过声明具有不同id的数据源bean并从属性文件中注入适当的属性,您可以在Spring上下文中配置任意数量的数据库。如果这两个数据库不同,那么您就处于分布式事务的区域中,您必须配置一个可以与JTA一起操作的Spring transaction manager。同样值得注意的是,Spring事务管理器只是一个抽象,它需要配置外部JTA事务管理器(如Bitrionix / Atomikos),或者如果部署在EE应用服务器下,则可以在JNDI注册表中查找事务管理器。然后,当您标记事务边界(可能使用Spring transaction注解)时,Spring将自动协调事务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21928000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档