我正在开发两个不同的spring引导服务,它们需要访问一个通用的mongorepository用户集合。
为了简单起见,我们有springbootapp1:user.java
@Document(collection = "user")
public class User {
@Id
private String id;
....
}
然后我得到存储库:userrepository.java
public interface UserRepository extends MongoRepository<User, String> {
}
现在我需要另一个应用程序,springbootapp2来读取用户。我本来打算在第二个服务中也这样做,但是我会有两个版本的user object,每个服务上定义一个版本,它们都试图从同一个mongorepository集合中读取。如果一个用户类在一个服务中被修改,另一个用户类将不知道,并且它们将开始不同步,除了在两个服务上都有重复或代码之外。
在这种情况下,最好的方法是什么?
1条答案
按热度按时间pdkcd3nj1#
为什么需要springbootapp2再次读取用户表?您可以在springbootapp1中公开一个api,该api将通过从app2调用来获取所需的数据。所有与数据库相关的操作都可以保存在一个微服务或一个应用程序中,如果需要数据库中的数据,只需在app1中公开方法并从app2调用即可。
更新:如您所说,app1对集合执行读写操作,并且只向经过身份验证的用户授予访问权限,app2执行简单的只读活动,在这种情况下,您可以在app2中使用jpa repo接口,只实现从集合中读取的方法。实体不需要任何setters方法,接口也不需要实现save/update方法。这种设计是无害的。您只是从两个不同的服务调用同一个数据库。没什么坏处。无论如何,您总是从app2对集合进行新的查询。
否则,如果您对这种方法也有顾虑,并且不想保留来自不同服务的多个db read逻辑,那么(我不知道除了db操作之外,您的app1还提供了哪些其他功能)我建议您创建app3,它仅用于db操作。
在这种情况下:
app1将执行与安全相关的操作+其他服务
设计app3,它不需要任何直接的用户凭证或安全性,就可以进行数据库操作
app1将执行身份验证,并且在成功调用app3进行任何db读写工作时,app3将不需要任何安全性
app2将调用app3进行任何db读取操作,app3不需要任何安全性