如果表不存在,如何防止创建 Spring Boot 存储库?

问题描述

亲爱的

我有一个连接两个不同数据源的应用程序。我根据启用/禁用属性处理数据源连接。但是,我遇到了一种情况,即存在一个架构但不包含正在使用我的应用程序的表。

我想知道我的应用程序启动时没有任何问题,即使表不存在(我没有在任何地方初始化 Lazy)。我不明白为什么在启动应用程序时它没有失败?但是,当我尝试读取数据时失败,除了 SCHEMA 中不存在 TABLE 之外。

我还需要知道,如果表仅存在,我们是否有可能加载存储库/bean?我希望有人在不同地区进行部署时可能会遇到类似的问题。

解决方法

在典型的生产设置中,JPA 实现(即可能是 Hibernate 或 EclipseLink)不会做任何检查以查看模式是否符合他们的期望。 我认为这是一个非常合理的默认设置,因为在大多数设置中,当架构丢失或损坏时,应用程序实际上没有任何合理的方式来采取行动。

您可以激活验证,至少使用 Hibernate 并且我认为 EclipseLink 有类似的功能。 How to validate Hibernate mapping against database

但这会引发异常并中止 EntityManager 的创建,因此停止启动您的应用程序,这似乎不是您想要的。

控制存储库的注入似乎很难实现,但您可以做的是在存储库中有一个方法,查询数据字典中是否存在表,并使用它来控制存储库是否被使用。