【问题标题】:How to dinamically create databases and access them with Spring/Hibernate?如何动态创建数据库并使用 Spring/Hibernate 访问它们?
【发布时间】:2017-04-20 03:19:34
【问题描述】:

我正在开发一个允许用户连接到网站的 Spring/Hibernate 应用程序, 创建、处理和保存自己的项目。 每个项目,其名称由用户实时定义,将是服务器上的一个 SQL 数据库。 这个想法是有一个“应用程序”数据库,其中存储用户的详细信息以及用户与其项目(数据库)之间的关联,以及几个 “项目”数据库,由用户动态创建和更新。

所以我希望 Spring 在用户创建新项目时动态创建新数据库,或者在用户打开现有项目时处理和使用现有数据库,等等。 当然,这是不能存储在xml配置文件中的东西。

目前,我为实体管理器实现了一个带有路由类的原型(如https://spring.io/blog/2007/01/23/dynamic-datasource-routing/ 中所述),并且我能够在 servlet.context.xml 中定义的两个数据源之间切换。

现在我想动态地将其他条目添加到数据源 bean 中,并且可以根据用户当前正在编辑的项目在它们之间实时切换。

<bean id="dataSource" class="com.myapp.spring.config.DbConnectionRoutingDataSource">
    <property name="targetDataSources">
        <map key-type="com.myapp.spring.config.ContextType">
            <!-- ... I would like to populate and manage this dynamically ... -->
            <entry key="application" value-ref="applicationDataSource"/>
            <entry key="project" value-ref="projectDataSource"/>
        </map>
    </property>
    <property name="defaultTargetDataSource" ref="applicationDataSource" />
</bean>

我找不到有关这样做的文档,所以我有一些疑虑和问题。

1) 我发现了一个名为“BeanFactoryPostProcessor”的对象:它适合这个目的吗?是否可以在代码中随时随地使用它?关于使用它的文档非常差。

3) 当数据源配置发生变化时,Spring 会自动重新配置自己吗?我的意思是,当我添加一个新的数据源时,现有的数据源仍然可以工作,或者我会抛出一种“重置”?

4) 这更多是另一种想法: 除了添加许多数据源值之外,我是否可以只为项目动态重新配置 DriverManagerDataSource(通过更改 URL 属性中的数据库名称)并使用相同的数据管理器? 使用这种方法,我将只有两个数据源(“应用程序”和“项目”),但用于项目的数据源会更改用户实际处理的目标数据库。

<bean id="projectDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />

非常感谢您的回答。

P.

【问题讨论】:

  • 您要查找的术语是多租户/多租户应用程序。

标签: java spring hibernate spring-mvc


【解决方案1】:

我知道这是一个很老的问题,但为了像我一样遇到这个问题的其他人,我想我会在这里发布我的答案。

正如 Kayaman 已经提到的,我认为您需要实现一个多租户应用程序。我在这里发布一个示例:

https://javadeveloperzone.com/hibernate/spring-hibernate-xml-multi-tenancy-example/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2016-11-12
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2016-04-05
    相关资源
    最近更新 更多