【问题标题】:Spring / Hibernate access different database in same mySQLSpring / Hibernate在同一个mySQL中访问不同的数据库
【发布时间】:2012-09-30 16:42:09
【问题描述】:

我正在尝试从 Spring/hibernate 中的同一个 Java 类同时访问两个数据库。它们在结构上是相同的。它们都驻留在同一个 mySql 实例中。我将它们称为“myDatabaseA”和“myDatabaseB”。

我的计划是将 DAO 和 Entity 类复制到不同的包中,例如“com.entities.packageA”和“com.entities.packageB”。在实体中,我将使用表注释的“目录”关键字来消除数据库的歧义,例如

@Entity
@Table(catalog="myDatabaseB", name = "myTable1")

最后,在 Session Factory bean 中,我将尝试在“basePackages”属性中为两个数据库指定实体,如下所示:

<!--  Session factory bean -->
<b:bean id="sessionFactory" class="com.mycompany.spring.ExtendedAnnotationSessionFactoryBean"">
    <b:property name="dataSource" ref="dataSource" />
    <b:property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    <b:property name="hibernateProperties" ref="hibernateProperties" />
    <b:property name="entityInterceptor" ref="baseEntityInterceptor" />
    <b:property name="basePackages">
        <b:list>
            <b:value>com.entities.myPackageA</b:value>
            <b:value>com.entities.myPackageB</b:value>
        </b:list>
    </b:property>
</b:bean>

在代码中,访问 myDatabaseA 时,我将使用“myPackageA”中的实体和 daos,访问 myDatabaseB 时使用 myPackageB。

这有意义吗?我对 Spring/Hibernate 有点陌生,所以这可能有点离谱。

【问题讨论】:

    标签: database spring hibernate


    【解决方案1】:

    如果表相同,则不必复制类。只有两个数据源和两个会话工厂。在配置数据源时,jdbcUrl 可以指定数据库名称。

    如果需要基于某些参数(例如正在访问它的用户)使用不同的数据库,您可以使用dynamic routing datasource 来查看

    【讨论】:

    • 这是同一个 mySql 实例,但该实例中的数据库不同。如何指定我在客户端代码中使用的会话?
    【解决方案2】:

    在您的应用程序配置文件中定义两个不同的 sessionFactories,它们都指向不同的数据库。 当您在应用程序中自动装配这两个 sessionFactories 时,请使用 @Qualifier 注解来加载它们。这样,您将通过使用相应的 sessionFactory 访问应用程序中的两个数据库。

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 2022-09-27
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2021-01-29
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多