如何在Spring Boot 中根据环境/条件设置@Table 名称?
How to set @Table name based on environment / condition in Spring Boot?
我有一个这样的实体Class
@Entity
@Table(name = "USER")
public class Users {
...
}
在生产部署期间,我想从这个用户那里读取 table。但是在舞台环境部署期间,我想阅读 USER_STAGE table.
@Entity
@Table(name = if (env=='prod') ? "USER" : "USER_STAGE")
public class Users {
...
}
我如何在没有任何服务级别逻辑的情况下实现这一点?
您应该通过分离数据库来实现。
我建议您使用不同的 spring 配置文件来处理不同的数据库连接,并且只需设置一个本地开发数据库,例如docker。
它应该是生产数据库的“副本”,意味着它在结构上与它相似(例如表的命名,列等是相同的)。
最好的方法是使用 flyway 或 liquibase 或任何其他类似工具来处理数据库的版本/迁移。
我有一份用于本地开发的配置文件,一份用于暂存,一份用于生产。这样你只需要管理 spring.
的 'application' 文件
考虑实施您自己的命名策略来更改 table 个名称。
然后将它们公开为 spring bean 并与 spring 引导集成。
由于命名策略本身可以是一个 bean,因此它可以获得可以根据激活的配置文件、env 等更改的 prefix 配置参数
我发现 this SO thread 讨论了“纯休眠”的命名策略。它还有一个更改了 table 名称的示例。
另外考虑阅读 this tutorial - 它讨论了将自定义命名策略与 spring boot
集成
我有一个这样的实体Class
@Entity
@Table(name = "USER")
public class Users {
...
}
在生产部署期间,我想从这个用户那里读取 table。但是在舞台环境部署期间,我想阅读 USER_STAGE table.
@Entity
@Table(name = if (env=='prod') ? "USER" : "USER_STAGE")
public class Users {
...
}
我如何在没有任何服务级别逻辑的情况下实现这一点?
您应该通过分离数据库来实现。
我建议您使用不同的 spring 配置文件来处理不同的数据库连接,并且只需设置一个本地开发数据库,例如docker。 它应该是生产数据库的“副本”,意味着它在结构上与它相似(例如表的命名,列等是相同的)。
最好的方法是使用 flyway 或 liquibase 或任何其他类似工具来处理数据库的版本/迁移。
我有一份用于本地开发的配置文件,一份用于暂存,一份用于生产。这样你只需要管理 spring.
的 'application' 文件考虑实施您自己的命名策略来更改 table 个名称。
然后将它们公开为 spring bean 并与 spring 引导集成。
由于命名策略本身可以是一个 bean,因此它可以获得可以根据激活的配置文件、env 等更改的 prefix 配置参数
我发现 this SO thread 讨论了“纯休眠”的命名策略。它还有一个更改了 table 名称的示例。
另外考虑阅读 this tutorial - 它讨论了将自定义命名策略与 spring boot
集成