我正在开发的应用程序的一个硬要求是支持生产中的多个后端 - Postgres、SQL Server 等。
Quarkus 在构建时锁定某些内置数据源配置,以便最终用户应用程序无法覆盖 db-kind/jdbc.driver 等内容。我有什么选项可以支持多个后端吗?如果需要的话,我什至愿意提供我自己的自定义 Hibernate 会话。
正如 @Ladicek 指出的,解决这一问题的通常方法是为您支持的每个数据库供应商配置一个数据源,默认情况下禁用所有数据源,并让用户使用运行时属性/配置文件激活正确的数据源。您还可以添加一些 CDI 魔法,让默认数据源透明地指向所选数据源(尽管这对于 Hibernate ORM 等来说还不够)。
整个解决方案在 http://quarkus.io/guides/datasource#datasource-active 进行了描述。如果使用 Hibernate ORM,您需要对持久性单元执行相同的操作:https://quarkus.io/guides/hibernate-orm#persistence-unit-active
如果这不起作用,您需要编辑问题以提供准确的配置 (
application.properties
)、堆栈跟踪以及相关注入点的代码,以便我们可以帮助您进行调试。
请注意,虽然这是迄今为止最直接的解决方案,但还有另一个合理的解决方案:重新增强。但这要麻烦得多:每个用户基本上都必须经历“第二次构建”过程来生成最终的可执行文件/容器,或者(更糟糕)让该过程在应用程序启动时运行。
有人建议在 Quarkus 中让这一切变得更容易,同时保留使 Quarkus 成为现实的优化(参见 https://github.com/quarkusio/quarkus/issues/43656),但到目前为止没有人接受这一点任务。很复杂。