【发布时间】:2015-01-22 16:59:33
【问题描述】:
我有一个使用 Spring、Hibernate 和 Wicket 连接到 MySQL 数据库的 Java Web 应用程序,我想将其重构并分成几个应用程序。我开始使用 Maven 的多模块系统,但实际上每个应用程序都有自己的发布周期,所以我现在放弃了这项工作,我正在考虑为每个应用程序创建单独的项目。他们都将继续连接到同一个数据库,所以我打算将模型类移动到他们自己的项目中,该项目可以用作依赖项。
我对此设置有几个问题:
将模型类移动到他们自己的项目中是解决多应用/单一数据库问题的典型解决方案,还是有其他方法?
有没有一种很好的方法可以确保所有应用程序都使用相同版本的模型依赖项?
我是否应该在这个核心项目中也包括每个应用程序可以使用或扩展的任何基础 daos 和服务,还是应该只包括我的
GenericHibernateDao并让每个应用程序创建自己的 daos 和服务?显然,我希望尽可能避免更改这个项目,因为它需要依赖它的所有应用程序的新版本。我是否需要更改任何与 Hibernate 相关的配置,例如连接池?每个应用程序都有自己的池还是应该共享一个池是否重要?我目前没有使用缓存,但我知道我是否需要分布式缓存?
如何在应用程序之间共享应用程序配置,例如数据库参数、电子邮件主机、短信网关等?有没有办法在某个地方定义它们一次以确保它们都指向同一个数据库?
在使用 Maven 或在部署期间,我在此设置中可能会遇到任何其他问题吗?我应该遵循任何提示或最佳做法?
【问题讨论】:
-
基于 #1 和 #2 我认为这将是一个为数据库层创建微服务的绝佳机会,其中包括执行所有处理的服务方法。这将确保在不同的系统上永远不会有不同的数据库模型。它还将在应用程序和底层数据之间创建一个很好的分离。
-
既然你没有问一个具体的问题,也没有得到人们的意见......这可能会被关闭。不过,我确实认为这是一组很好的问题。或许您应该在社区 Wiki 中提出这个问题?
-
@mnd 你能解释一下这将如何工作吗?这是否意味着对服务的更改需要发布所有依赖它们的应用程序的新版本?
-
@Ascalonian Yeh,我不确定是发在这里还是发到programmers.stackexchange.com
-
@Jack,是的,如果微服务发生了变化,您将不得不更新应用程序——我在想#2 表明你不想不小心让一个应用程序使用旧模型——而是如果服务更改,应用程序将停止工作。另一方面,如果您愿意支持多个版本,则可以对 REST API 进行版本控制,其中部分 url 包含
/v1/或/v2/以指示您正在使用的 API 版本。如果您能够同时支持多个模型,那就太好了。
标签: java spring hibernate maven project-structure