Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Grails动态数据库连接?_Database_Hibernate_Grails_Groovy - Fatal编程技术网

Database Grails动态数据库连接?

Database Grails动态数据库连接?,database,hibernate,grails,groovy,Database,Hibernate,Grails,Groovy,在我工作的地方,我们需要能够查询多个数据库。其中一些是预定义的,我们使用数据源进行访问。其他以客户id#命名。例如2。我们有数百名客户,有些客户可以冒充其他客户,根据当时使用界面的客户,我们需要连接到他们的特定数据库以获取他们的特定数据 我读过Grails不可能做到这一点,但我很难相信根本没有办法做到这一点。是否有一些可能的方法来编写一个插件或使用hibernate来实现这样的动态连接?有人遇到过这个问题吗?你做了什么来处理它 任何信息都会有帮助。由于这种疯狂的数据库设计,我们的开发陷入了死胡同

在我工作的地方,我们需要能够查询多个数据库。其中一些是预定义的,我们使用数据源进行访问。其他以客户id#命名。例如2。我们有数百名客户,有些客户可以冒充其他客户,根据当时使用界面的客户,我们需要连接到他们的特定数据库以获取他们的特定数据

我读过Grails不可能做到这一点,但我很难相信根本没有办法做到这一点。是否有一些可能的方法来编写一个插件或使用hibernate来实现这样的动态连接?有人遇到过这个问题吗?你做了什么来处理它


任何信息都会有帮助。由于这种疯狂的数据库设计,我们的开发陷入了死胡同

这本书可能会派上用场。我不确定你想如何用它来切分,但你肯定离你想要实现的目标更近了一步。

这个可能会派上用场。不确定您希望如何使用此功能进行切分,但您肯定离您想要实现的目标更近了一步。

我认为这是可能的,一些实现想法:

我会使用DataSources插件+自定义DataSource类。 您可以使用DataSources插件来分离指向主数据库和客户特定数据库的域类

为了路由到客户数据库,您可以创建自己的数据源类。我建议从扩展自定义类。 自定义数据源决定要使用的目标数据源。 您应该创建一个数据源池,您可以使用commons.apache.org/pool/来实现该池。 数据源池可以在一段非活动时间后关闭数据源(连接池)

您可以使用ThreadLocal通知“数据源池”池客户已登录,该信息可用于选择(或动态创建)正确的目标数据源

除非您实现某些特定的Hibernate缓存实现(这应该可以使用与数据源中相同的“路由思想”),否则您必须关闭客户特定类的所有Hibernate缓存

您可以使用自定义版本覆盖resources.groovy中的默认数据源bean,请参阅dataSource Plugin faq(grails.org/Plugin/datasources#faqTab)

我推荐Tomcat JDBC池(JDBC池Grails插件:Grails.org/plugin/JDBC池)作为数据源/数据库池实现。
BoneCP(jolbox.com/)看起来也很有希望,但我还没有测试过它。

我认为这是可能的,一些实现想法:

我会使用DataSources插件+自定义DataSource类。 您可以使用DataSources插件来分离指向主数据库和客户特定数据库的域类

为了路由到客户数据库,您可以创建自己的数据源类。我建议从扩展自定义类。 自定义数据源决定要使用的目标数据源。 您应该创建一个数据源池,您可以使用commons.apache.org/pool/来实现该池。 数据源池可以在一段非活动时间后关闭数据源(连接池)

您可以使用ThreadLocal通知“数据源池”池客户已登录,该信息可用于选择(或动态创建)正确的目标数据源

除非您实现某些特定的Hibernate缓存实现(这应该可以使用与数据源中相同的“路由思想”),否则您必须关闭客户特定类的所有Hibernate缓存

您可以使用自定义版本覆盖resources.groovy中的默认数据源bean,请参阅dataSource Plugin faq(grails.org/Plugin/datasources#faqTab)

我推荐Tomcat JDBC池(JDBC池Grails插件:Grails.org/plugin/JDBC池)作为数据源/数据库池实现。
BoneCP(jolbox.com/)看起来也很有希望,但我还没有测试过它。

实际上“SingleTenant”模式是您所寻找的。

实际上“SingleTenant”模式是您所寻找的。

我不知道您的问题的答案(我感觉在hibernate中是不可能的,因为它是在编译时定义的?)但该死的,这简直是疯了!好luckI不知道你的问题的答案(我感觉在hibernate中这是不可能的,因为它是在编译时定义的?)!祝你好运