我们正在开发一个 Spring Boot 库来生成和验证 OTP。它使用数据库来存储 OTP。
我们使用 Spring Data JPA 进行数据库操作,因为根据项目可以轻松处理多个数据库系统。
现在我们遇到了一个问题,我们的大多数项目都使用 Oracle 和单个数据库。 当在多个项目中使用相同的库时,会出现名称冲突。 因此,我们希望可以使用属性文件配置 OTP 表的名称。
我们尝试了
@Table(name = "${otp-table-name}")
但它不起作用。
我们做了很多研究,发现 hibernate 命名策略配置可以提供帮助。
但是我们不想在库中使用大量配置,因为我们需要库能够在项目中轻松使用。
有人可以在这方面帮助我们吗?
提前致谢。
您可以根据当前上下文动态确定实际的DataSource,使用Spring的
AbstractRoutingDataSource
类。您可以编写自己的此类版本,并将其配置为基于属性文件使用不同的数据源。
这允许您在数据库或模式之间切换,而无需更改库中的代码。
参见:https://www.baeldung.com/spring-abstract-routing-data-source
使用
NamingStrategy
是个好方法。
您可以让它委托给现有的
NamingStrategy
并添加前缀。
使用库特定的默认前缀,但也允许库的用户指定替代前缀。
这样您的库无需额外配置即可使用,而且还可以处理多个应用程序在同一数据库模式中使用它的情况。
当然,这可能涉及有人使用默认前缀而没有意识到该前缀已被使用的风险。 目前尚不清楚这种情况的后果是什么。 如果后果真的很糟糕,您应该放弃默认值并要求使用项目特定的前缀。 当未指定前缀时,会抛出异常,并带有指导性错误消息,告诉用户,即开发人员如何选择前缀以及将其放在哪里。
在POM中添加依赖
https://mvnrepository.com/artifact/io.github.ilankumarani/naming-strategy-resolver
请参阅自述文件 https://github.com/ilankumarani/naming-strategy-resolver
注意:这适用于Java17如果你想让它适用于较低版本的Java,那么找到兼容的Spring boot和java版本