我们正在开发一个用于生成和验证OTP的 Spring 启动库,它使用数据库来存储OTP。
我们正在使用SpringDataJPA进行数据库操作,因为根据项目的不同,处理多个数据库系统会很容易。
现在我们遇到了一个问题,我们的大多数项目使用Oracle的单个数据库。当在多个项目中使用相同的库时,会出现名称冲突。因此,我们希望OTP表的名称可以使用属性文件进行配置。
我们尝试了@Table(name = "${otp-table-name}")
,但它不工作。
我们做了大量的研究,发现hib命名策略配置可以提供帮助。
但是我们不想在库中使用大量的配置,因为我们需要库在项目中易于使用。
在这方面有人能帮我们吗。
先谢了。
2条答案
按热度按时间bgibtngc1#
你可以使用Spring的
AbstractRoutingDataSource
类,根据当前上下文动态地确定实际的DataSource,你也可以编写自己版本的该类,并根据属性文件配置它使用不同的数据源。这允许您在数据库或架构之间切换,而不必更改库中的代码。
参见:https://www.baeldung.com/spring-abstract-routing-data-source
8cdiaqws2#
使用
NamingStrategy
是一种很好的方法。您可以让它委托给现有的
NamingStrategy
并添加前缀。使用库特定的默认前缀,但也允许库的用户指定替代前缀。
这样,您的库可以在没有额外配置的情况下使用,但也可以处理多个应用程序在同一数据库模式中使用它的情况。
当然,这可能涉及到某些人使用默认前缀而没有意识到已经使用的风险。不清楚这种情况的后果是什么。如果后果非常严重,您应该删除默认值,并要求使用项目特定的前缀。当没有指定前缀时,将引发异常,并显示一条说明性错误消息,告诉用户,即开发者如何挑选前缀以及将其放置在何处。