gpt4 book ai didi

java - 为不同的客户共享网络应用程序

转载 作者:行者123 更新时间:2023-12-01 12:25:59 25 4
gpt4 key购买 nike

我们的框架是 Grails。假设domain.com包含一个应用程序并且当前被某个客户端使用。如果我们想让另一个客户端具有相同的功能,但为两个客户端的数据提供分离,以便它们不能混合使用,该怎么做?每当我们想要向此应用程序添加 n 个客户端时,应遵循的最佳方法是什么,以便我们可以通过分离数据库来共享这些客户端的公共(public) war 文件,从而用更少/无需配置

实时 Web 开发如何处理此类情况?

还有一点是如何提供 client1.domain.com 适用于 client1 和 client2.domain.com 适用于 client2。如何使 war 文件(在 Java/Grails 中)像这样工作?否则,我们必须以编程方式控制项目中的客户端,以允许每个功能,或者不必要地为每个客户端维护单独的 war 文件,这将浪费资源。

最佳答案

您正在描述 Multi-Tenancy - 为 N 个“租户”创建一个表,而不是 N 个相同(或接近)的表,但使用tenant_id 列对其进行分区,并使用它来过滤 SQL WHERE 子句中的结果。

例如,findByUsername 的生成代码将类似于 select * from person where username='foo' and tenter_id=3' - 与常规代码相同调用但使用tenant_id列来限制该租户的数据。

请注意,以前简单的事情(例如唯一约束)现在变得更加困难,因为您希望限制租户内的唯一性,但允许在租户之间重用某个值。在这种情况下,将唯一约束更改为用户名和租户 ID 的组合可以发挥作用,并在数据库中完成繁重的工作。

有一段时间有几个相关的插件,但它们依赖于调整内部 API,并且一些功能在较新的 Hibernate 版本中被破坏。但我相信http://grails.org/plugin/multi-tenant-single-db活跃;它是一年多前更新的,但仍在使用中。如果您需要它来确保它处于 Activity 状态,请联系作者。请注意,这仅适用于 Hibernate 3.x。

Hibernate 4 添加了对 Multi-Tenancy 的支持,但我还没有听说过它在 Grails 中的使用情况(这是预料之中的,因为它不是常见的要求)。它没有很好的记录,但这个错误报告强调了一些潜在的陷阱,并且应该仍然是一个工作示例(测试应用程序仍在 GitHub 上):https://jira.grails.org/browse/GPHIB-6 .

我想确保此功能正常工作并继续有效,因此如果您稍后遇到问题,请通过电子邮件告诉我。这是一个很棒的功能,将其纳入 Hibernate 核心使我们的工作变得更加轻松。但我们需要使其易于使用并有良好的文档记录,当它在实际项目中使用时,这会发生得更快。

关于java - 为不同的客户共享网络应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com