如何在Spring云模块微服务中共享数据库连接歌曲。如果有许多微服务,我如何使用相同的数据库连接,或者我应该为每个微服务使用数据库连接?
在我看来,你所要求的东西是不可能的,因为每个微服务都是一个专用的进程,它运行在自己的JVM中(可能在多个服务器中)。当您创建与数据库的连接时(假设您使用连接池),它始终位于单个JVM的级别。
我明白,你有可能意味着不同的东西,但我不得不戴上它,因为它直接回答了你的问题
现在,您可以在微服务(相同的模式,表等)之间共享相同的数据库,以便每个JVM都打开一组连接(根据连接池定义)。但是,这是一个非常糟糕的做法 - 您不希望在微服务之间共享数据库。原因是改变的代价:如果你(作为微服务A的维护者)决定改变其中一个表,现在所有的微服务都必须支持这个,这不是一件容易的事。
因此,更好的方法是在某个域中拥有对您的数据“全权负责”的服务。现在,所有服务都可以联系此服务,并通过完善的API来请求所需的数据,这些API永远不会被破坏。在这种方法中,变更的成本要“更便宜”,因为只有这种“数据服务”才能以不破坏现有API的方式进行更改。
现在关于数据库连接的事情:你通常会有多个JVM运行相同的微服务(比如数据微服务),所以,不是你在它们之间共享连接,而是你共享相同的数据库工作方式(因为之后)所有相同的代码)。
在处理微服务架构时,通常情况下您拥有分布式系统。
大多数彼此通信的微服务不在同一台机器,实例或容器上。它们之间的通信最常通过http进行,但还有很多其他方式。
我建议围绕应用程序的一个问题设计mircoservices。例如,在您的情况下,您可以使用“持久性微服务”来负责处理单个或多个类型数据存储上的数据持久性操作。它可能处理关系数据库,noSQL,文件存储等。然后,通过REST端点,您可以将任何持久性功能暴露给处理业务逻辑的mircoservices。
在Spring Data REST项目的帮助下,构建这样的REST服务非常简单。
要回答您的实际问题,我不知道有任何方法可以在进程之间共享实际连接。除此之外,在同一个实例上运行许多微服务并不是一个很好的做法。
微服务现在非常流行,每个人都试图过渡到它们。我的建议是确保你不要“过度设计”你的项目。
希望我没有误解你的问题,但公平地说它有点模糊。如果您可以提供更详细的架构和用例说明,我可以建议您使用更多工具/框架来实现您的多云目标。
首先也是最重要的 - 您的微服务应负责处理给定业务域/有界上下文中的所有数据。所以问题是 - '为什么你需要在微服务之间共享数据库连接,这不是一个标志,你在切片系统时走得太远了吗?微服务是一个工具,“微”这个词可能会误导一点:)
如需更多阅读,我建议例如https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-container-applications/identify-microservice-domain-model-boundaries(别担心,它一般适用于Spring)。