如何使用Spring来管理与多个数据库的连接

时间:2013-03-12 20:41:34

标签: java database spring hibernate jdbc

我已阅读其他主题,但没有找到一个好的和明确的答案

我正在尝试开发一个能够:

的网络应用程序

1)在一个单独的UI数据库中记录/跟踪用户事件,我们通过hibernate与相同的数据库模式连接(可能将connectionString保存到不同的oracle数据库)

2)在运行时,当您登录时,您可以选择一个环境来连接到具有相同模式(但不是相同数据)的三个不同oracle数据库之一

3)使用用户名和密码提供正确的DataSource(从哪里获取这些敏感数据?我不会将其存储在应用程序的某处)

我是Spring框架的新手。我发现这个link可能是第一个领导。

有什么建议吗?

还使用Spring 3.1或3.2,JDBC查询我的oracle数据库和hibernate映射到我的UI数据库。这听起来很混乱所以我有一张照片:

infrastructure

2 个答案:

答案 0 :(得分:1)

只需创建不同的DAO,每个DAO都附加一个单独的持久性单元。 在persistence.xml中,您可以将多个持久性单元连接到不同的数据库。

示例:

public class Dao1{
@PersistenceContext(unitName="Database1")
protected EntityManager entityManager;

public class Dao2{
@PersistenceContext(unitName="Database2")
protected EntityManager entityManager;


<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">
    <persistence-unit name="Database1">     
        <exclude-unlisted-classes />                    
        <properties>
        </properties>
    </persistence-unit>

    <persistence-unit name="Database2">     
        <exclude-unlisted-classes />                    
        <properties>
        </properties>
    </persistence-unit>
</persistence>

答案 1 :(得分:0)

您在帖子中提到的链接说明如下:

1)创建指向不同模式的不同数据源。

2)扩展AbstractRoutingDataSource并创建自己的数据源,覆盖将提供key值的determineCurrentLookupKey方法。在您的情况下,它将返回用户从UI中选择的任何内容。同样在自定义数据源的bean定义中,将所有数据源作为map传递,并在UI上使用key作为选项。

3)现在将此数据源分配到会话工厂bean中。