我正在从事一个项目,在这个项目中,我们将部署一个完整的Spring微服务体系结构,以及支持诸如负载平衡、服务注册中心、边缘服务器和集中监视等服务。
我有一个项目,它将在所有核心微服务之间共享,其中包含DAO和核心微服务的所有依赖项。我希望能够发布一个~60 1Mb的jar,并使其他Spring核心微服务非常轻量级(<1Mb)。在运行时,核心微服务将引用其类路径上的共享jar。
我设置该项目的方式是有一个独立的项目,其结构如下:
|shared_project
|pom.xml
|ms-1
|pom.xml
|ms-2
|pom.xml共享项目使用maven程序集插件创建一个大jar,并将其复制到本地的.m2回购系统中。ms-1和ms-2 poms使用maven-jar-plugin创建它们的jar,并具有一个依赖项,即共享项目。
我相信这不是处理这件事的最好方法。它在单元测试期间产生问题,我不得不想象它会在最后产生问题。我看到这是通过父母在pom文件中、在另一个目录中嵌套项目以及其他方式完成的。
我想知道的是,通过使用Maven将Spring项目的依赖项和共享代码保持为集中化和外部化的最佳实践是什么,以便您经常滚动的项目保持轻量级和解耦?
奖金问题:
编辑:我认为这里已经有了一个很好的答案:Parent pom and microservices
发布于 2018-08-11 06:17:40
很抱歉,两年后回复,但这是我第一次点击搜索引擎。您提到了共享DAO等等,但就我所理解的微服务而言,根本不共享DAO不是主要目标之一吗?这个结构不是真的破坏了您的微服务体系结构吗?两年后对此有何反馈?)
但我确实同意,有一个非常小的代码库,可以共享。但它只是一些基本的用途,例外的基础,等等,所以真正的基本的东西,可以在公司的任何项目之间共享。
我永远不会创建共享的核心代码库或/和与外部jars依赖的部署。根据我的理解,基于java的微服务的部署必须像"java -jar application.jar“一样简单.使应用程序的本地测试、CI、部署和替换变得非常容易。
想知道其他的意见
(愉快的编码;)
发布于 2018-08-11 06:45:59
这就是我们在企业应用程序中所做的工作:
创建一个新的maven项目,它将作为所有项目的uber jar。将所需的所有应用程序作为此项目中的依赖项添加。在这里添加maven阴影插件。在这个uber中创建一个带有runner class的public static void main(String[] args),它初始化所有bean并启动所有应用程序。
希望能帮上忙。
https://stackoverflow.com/questions/38380827
复制相似问题