如何通过 Spring Data JPA 了解底层数据库名称

Posted

技术标签:

【中文标题】如何通过 Spring Data JPA 了解底层数据库名称【英文标题】:How to know underlying database name via Spring Data JPA 【发布时间】:2020-04-10 02:45:05 【问题描述】:

我正在使用 Spring Data JPA 连接到我的 spring-boot 应用程序中的多个数据库,方法是确定在运行时连接哪个数据库。如何检查我实际连接到哪个数据库的验证,我的查询正在运行?

【问题讨论】:

你使用休眠多租户吗? 是的,我正在使用多个数据源并遵循本教程:javadeveloperzone.com/spring-boot/… 您不相信该方法的哪一部分需要验证? 在返回适当的实体管理器时,我有一个错字,并且在两种情况下都返回了相同的实体管理器,因此无论输入如何,查询都在同一个数据库上运行 - 因此出现了验证我连接的位置到。我能够解决我的实际问题,但仍想探索了解连接数据库的可能性。 【参考方案1】:

尝试从数据源中获取 URL,也许会这样做:

dataSource.getConnection().getMetaData().getURL();

查看DatabaseMetaData 文档以获取完整详细信息。

【讨论】:

OP 说他有多个数据库,所以他很可能有多个数据源。对于这段代码,问题仍然是如何获取实际使用的数据源。【参考方案2】:

我能想到的只有一些像(简化的)

@Entity
public class ConfigDB
 Integer id;

 String tenant; 

然后有一个存储库:

public ConfigDBRepository extends CrudRepository
  public boolean existsByTenant(String tenant);

并且在此表设置中的每个数据库中都有此租户以进行验证。

【讨论】:

【参考方案3】:

引用的答案来自:

how to properly specify database schema in spring boot?

只是在实际的数据库主机名之后附加架构名称。对于我的代码 mysql DB 已配置,这对我来说很好:

appname.datasource.url = jdbc:mysql://DBhostname.com/schema_test?useSSL=false

键名可以是适合您的应用程序的任何自定义名称

【讨论】:

以上是关于如何通过 Spring Data JPA 了解底层数据库名称的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data 系列学习Spring Data JPA 基础查询

了解 Spring Data JPA @NoRepositoryBean 接口

spring data jpa学习笔记一:helloworld

如何通过 Sum SQL 与 Spring Data JPA 一起使用组?

Spring Boot中使用Spring Data JPA示例

spring-data-jpa