如何在spring boot中根据环境/条件设置@table name?

tag5nh1u  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(768)

我有一个这样的实体类

@Entity
@Table(name = "USER")
public class Users {
...
}

在生产部署期间,我想从这个用户表中读取。但在stage环境部署期间,我想从user\u stage表中读取。

@Entity
@Table(name = if (env=='prod') ? "USER" : "USER_STAGE")
public class Users {
...
}

在没有任何服务级别逻辑的情况下如何实现这一点?

rqmkfv5c

rqmkfv5c1#

您应该通过分离数据库来实现这一点。
我建议您使用不同的spring配置文件来处理不同的数据库连接,只需设置一个本地开发数据库,例如使用docker。它应该是生产数据库的“副本”,意味着它的结构与之类似(例如,表、列等的命名是相同的)。
最好的方法是使用flyway、liquibase或任何其他类似工具来处理数据库的版本/迁移。
我有一个地方发展,一个阶段和一个生产概况。这样,您只需管理spring的“application”文件。

epggiuax

epggiuax2#

考虑实现自己的命名策略来更改表名。
然后将它们作为springbean公开,并与springboot集成。
由于命名策略本身可以是一个bean,因此它可以获得prefix的配置参数,该参数可以根据激活的概要文件、env等进行更改。
我发现这篇文章讨论了“纯休眠”的命名策略。它还有一个更改了表名的示例。
此外,请考虑阅读本教程—它讨论如何将自定义命名策略与SpringBoot集成

相关问题