Java 如何通过Spring/Hibernate动态创建数据库并访问它们?

Java 如何通过Spring/Hibernate动态创建数据库并访问它们?,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在开发一个Spring/Hibernate应用程序,它允许用户连接到网站, 创建、处理和保存自己的项目。 每个项目(其名称由用户实时定义)都将是服务器上的SQL数据库。 其想法是建立一个“应用程序”数据库,其中存储用户的详细信息和用户与其项目(数据库)之间的关联,以及几个 “项目”数据库,由用户动态创建和更新 因此,我希望Spring在用户创建新项目时动态创建新数据库,或者在用户打开现有项目时处理现有数据库,等等。 当然,这是不能存储在xml配置文件中的 目前,我使用实体管理器的路由类(如中

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

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

目前,我使用实体管理器的路由类(如中所述)实现了一个原型,并且能够在servlet.context.xml中定义的两个数据源之间切换

现在,我想友好地向DataSourceBean添加其他条目,并且可以根据用户当前编辑的项目在它们之间实时切换

<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) 这更像是另一种想法: 我是否可以为项目动态地重新配置DriverManager数据源(通过更改URL属性中的数据库名称)并使用相同的datamanager,而不是添加许多数据源值? 使用这种方法,我将只有两个数据源(“应用程序”和“项目”),但用于项目的数据源将更改用户实际处理的目标数据库

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

非常感谢您的回答


p.

我知道这是一个很老的问题,但为了像我这样遇到这个问题的人,我想我会把我的答案贴在这里

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


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