我正在开发一个项目,我们将在其中部署完整的Spring Boot微服务架构,以及支持服务,如负载平衡,服务注册,边缘服务器和集中监控。
我有一个项目将在包含DAO和核心微服务的所有依赖项的所有核心微服务之间共享。我希望能够释放一个~60Mb的jar,并让其他Spring Boot核心微服务非常轻量级(<1Mb)。在运行时,核心微服务将在其类路径上引用共享jar。
我设置项目的方式是使用单独的项目,具有如下结构:
|shared_project
|pom.xml
|ms-1
|pom.xml
|ms-2
|pom.xml
共享项目使用maven-assembly-plugin创建一个大jar并将其复制到我的本地.m2 repo。 ms-1和ms-2 poms使用maven-jar-plugin创建它们的jar并且有一个依赖项,即共享项目。
我确定这不是处理此问题的最佳方法。它在单元测试期间产生了问题,我不得不想象它会在线下产生问题。我已经看到这在pom文件中使用父项完成,将项目嵌套在另一个目录中,以及其他方式。
我想知道的是保持Spring Boot项目的最佳做法是什么?通过使用Maven集中和外部化依赖关系和共享代码,以便您经常滚动的项目保持轻量级和解耦?
奖金问题:
我们是否会使用Jenkins / TeamCity进行CI和自动化测试会影响答案吗?
在启动期间每个项目在其类路径中引用的文件系统上是否有一个共享jar会带来任何挑战?根据需求,我们可以灵活地启动10个微服务1实例和3个微服务2实例。
答案 0 :(得分:1)
很抱歉,两年后回覆,但这是我在搜索引擎上的第一次成功。您提到的是共享DAO等,但是据我所了解,微服务并不是完全不共享DAO的主要目标之一。这种结构真的不会破坏您的微服务架构吗?两年后对此有任何反馈吗? ;)
但是我同意,有一个很小的代码库可以共享。但这只是一些基本的utils,exception base等,因此真正的基本内容可以在公司的任何项目之间共享。
我永远不会创建共享的核心代码库或/和具有依赖于外部jar的部署。以我的理解,基于Java的微服务的部署必须像“ java -jar application.jar”一样简单……使本地测试,CI,应用程序的部署和替换变得如此简单
对其他意见很感兴趣
快乐编码;)
答案 1 :(得分:0)
这是我们在企业应用程序中所做的:
创建一个新的Maven项目,该项目将用作所有项目的超级jar。
将所需的所有应用程序添加为该项目的依赖项。
在此添加Maven Shade插件。
在此uber jar中,用runner class
创建一个public static void main(String[] args)
,以初始化所有bean并启动所有应用程序。
希望有帮助。