【问题标题】:How to organize and manage multiple database credentials in application?如何在应用程序中组织和管理多个数据库凭据?
【发布时间】:2010-03-12 03:33:51
【问题描述】:

好的,我正在设计一个独立的 Web 服务(使用 RestLET 作为我的框架)。我的应用分为 3 层:

  • 数据层(就在数据库之上,提供用于连接/查询数据库的 API,以及一个数据库对象)
  • 对象层(负责从数据层进行序列化...提供客户层可以使用而无需担心数据库的对象)
  • 客户端层(这一层是 RestLET Web 服务...基本上只是从对象层创建对象并满足 Web 服务请求)

现在,对于我在对象层中创建的每个对象,我想使用不同的凭据(这样我就可以对每个对象进行沙箱化...)。对象层不应该知道确切的凭据(即 login/pw/DB URL 等)。

管理此问题的最佳方法是什么?我在想我的数据层应该有一个超类数据库对象......每个子类都将包含所需的登录信息......这样我的对象层就可以去Database db = new SubDatabase();然后继续使用它数据库。

在客户端级别,他们只能访问ItemCollection items = new ItemCollection();,并且不知道/无法控制连接的数据库。

我问这个是因为我试图让我的平台可扩展,以便其他人可以轻松地在我的平台之外创建服务。

如果有人对这些架构问题或如何管理这类事情有任何经验,我将不胜感激任何见解或建议......

如果这令人困惑,请随时提出问题。谢谢!

我的平台是 Java,我使用的 REST 框架是 RestLET,我的数据库是 MySQL。

【问题讨论】:

  • 如果你使用的是Spring或者任何应用服务器,你可以分别配置beans和datasources。您的 DAO 可以注入或查找相同的内容。如果您对接口进行编程,并且不使用任何特定于数据库的功能,那么它将正常工作。

标签: java architecture rest restlet


【解决方案1】:

我的建议是使用 JTA,您可以使用多个数据库和相应数量的数据源。你可以参考这里了解更多信息https://test.kuali.org/confluence/display/KULRICE/Datasource+and+JTA+Configuration

【讨论】:

    【解决方案2】:

    我觉得您的解释是明智的,并且您试图不将数据库详细信息和凭据暴露给客户端级别。

    对于这种情况,您需要考虑任何可能对您有所帮助的设计模式 我可以想到单例模式,您可以在其中创建一个实例并在对象层中使用它,从而避免向用户显示有关凭据和 URL 的任何详细信息。

    第二个选项,我想到的是使用休眠层,它可以帮助你隐藏细节,只访问 ORM 对象,你就可以得到你想要的。

    【讨论】:

      【解决方案3】:

      我会回应 @saugata 的 cmets。查看Spring 并将您的数据源实现(或用于测试的存根!)注入您的Spring 配置中的对象层。这应该会以多种方式帮助您的整体应用程序架构:

      1. 您无需重新编译代码即可即时切换数据库(实例或实现)。
      2. 您将从数据源的实现中完全抽象出数据源 - 允许您将数据库交换为 Web 服务、队列实现或存根。
      3. 以这种方式解耦您的应用程序将使测试更容易。

      【讨论】:

        猜你喜欢
        • 2012-10-13
        • 2020-01-30
        • 2014-05-13
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 2015-02-15
        • 2013-07-05
        • 1970-01-01
        相关资源
        最近更新 更多