属性文件中的Spring boot jpa实体表名称

问题描述 投票:0回答:3

我们正在开发一个 Spring Boot 库来生成和验证 OTP。它使用数据库来存储 OTP。

我们使用 Spring Data JPA 进行数据库操作,因为根据项目可以轻松处理多个数据库系统。

现在我们遇到了一个问题,我们的大多数项目都使用 Oracle 和单个数据库。 当在多个项目中使用相同的库时,会出现名称冲突。 因此,我们希望可以使用属性文件配置 OTP 表的名称。

我们尝试了

@Table(name = "${otp-table-name}")
但它不起作用。

我们做了很多研究,发现 hibernate 命名策略配置可以提供帮助。

但是我们不想在库中使用大量配置,因为我们需要库能够在项目中轻松使用。

有人可以在这方面帮助我们吗?

提前致谢。

spring spring-boot jpa spring-data-jpa spring-data
3个回答
0
投票

您可以根据当前上下文动态确定实际的DataSource,使用Spring的

AbstractRoutingDataSource
类。您可以编写自己的此类版本,并将其配置为基于属性文件使用不同的数据源。

这允许您在数据库或模式之间切换,而无需更改库中的代码。

参见:https://www.baeldung.com/spring-abstract-routing-data-source


0
投票

使用

NamingStrategy
是个好方法。

您可以让它委托给现有的

NamingStrategy
并添加前缀。

使用库特定的默认前缀,但也允许库的用户指定替代前缀。

这样您的库无需额外配置即可使用,而且还可以处理多个应用程序在同一数据库模式中使用它的情况。

当然,这可能涉及有人使用默认前缀而没有意识到该前缀已被使用的风险。 目前尚不清楚这种情况的后果是什么。 如果后果真的很糟糕,您应该放弃默认值并要求使用项目特定的前缀。 当未指定前缀时,会抛出异常,并带有指导性错误消息,告诉用户,即开发人员如何选择前缀以及将其放在哪里。


0
投票

在POM中添加依赖

https://mvnrepository.com/artifact/io.github.ilankumarani/naming-strategy-resolver

请参阅自述文件 https://github.com/ilankumarani/naming-strategy-resolver

注意:这适用于Java17如果你想让它适用于较低版本的Java,那么找到兼容的Spring boot和java版本

© www.soinside.com 2019 - 2024. All rights reserved.