将只读数据库副本用于只读 GORM 方法和标准

Use read-only DB replica for read-only GORM methods and criteria

我有一个只读的 MySql 数据库副本,我想将它用于整个项目中所有基于 select 的 GORM 请求和标准 (Grails 3.1.16) 有什么漂亮的方法可以只为部分 GORM 方法(例如 get、find)覆盖默认的 DataSource?

根据文档,我们可以为 domain/service 使用特定的数据源,或者在每个方法调用中使用命名空间。但我正在寻找更通用的机制。

Is there any beautiful way to override the default DataSource only for the part of GORM methods (e.g. get, find)?

没有。

您可以根据需要配置任意数量的数据源,但您不能声明性地表示一个用于读取而其他用于写入或类似的操作。您可以很容易地让一个成为默认值,然后在您想做其他事情时明确说明。例如,SomeDomainClass.nameOfDatasourceUsedForReads.list()

您可以使用 dbresolver。 例如:

db.Use(dbresolver.Register(dbresolver.Config{
    Replicas: []gorm.Dialector{mysql.Open("read_only_replica")},
}))