Spring 项目如何实现可以拆开部署也可以合并成一个 web 项目部署

2020-04-23 16:00:33 +08:00
 rizon

我们有几个 spring 服务,期望实现的效果是:

在某些客户方,我们把这几个服务作为一个 web 服务来部署。

在某些客户方,我们把服务拆分成多个 web 服务来部署。

有什么好的实现办法吗?

4141 次点击
所在节点    程序员
27 条回复
guyeu
2020-04-23 18:57:43 +08:00
当然同样的原理,分成 maven 子模块也可以。
wangxiaoaer
2020-04-23 19:16:06 +08:00
app-1:jar
app-2:jar
app-3:jar

app-1-release:war <--app-1.jar
app-2-release:war <--app-2.jar
app-3-release:war <--app-3.jar

app-all-release:war <-- app-1.jar,app-2.jar,app-3.jar

maven 的话一共 7 个 module,需要哪个打包哪个
rizon
2020-04-23 19:24:42 +08:00
@guyeu #20 怎么解决 web 的上下文问题?每个独立部署的时候 有自己的 context-path 合并之后 上下文怎么办?
SaltedFish12138
2020-04-23 20:10:12 +08:00
我觉得,从大的方向上来说,你要在变化的客户需求之前,保证自己牢固的项目基础。如果可能,尽量以外部工具和设置满足客户差异化的部署需求。

就楼主的实际情况来分析:
1. 做成微服务,至于各模块要拆开为不同的项目,还是 subproject 或者 module 就随意了
2. 用 docker 部署, 每个微服务不同的 dockerfile (实现多服务部署);再做一个 dockerfile,把所有微服务集成到一个 docker image 里(实现一个服务部署)(诚如楼主所言,不太符合 docker 设计原则,但客户需求千奇百怪,咱也得灵活运用工具不是)
3. 多服务部署时,使用 docker compose 维护依赖和各容器间环境变量的关系。单服务的环境变量和上下文就很随意了,用 docker 设置还是 Spring 配置文件就看自己需求了
guyeu
2020-04-23 20:41:39 +08:00
@rizon #23 一个应用可以有多个上下文的。
rizon
2020-04-27 10:34:49 +08:00
@guyeu #25 额 Spring 配置文件里的 contextpath 不就只有一个吗?
guyeu
2020-04-27 10:42:19 +08:00
@rizon #26 一份配置文件对应一个 FileSystemXmlApplicationContext 或 ClassPathXmlApplicationContext,然而是可以有多个的,以 ApplicationContext 作为关键词搜一下吧。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX