grails3—配置多数据源

如果grails项目中,不同的domain类型需要映射不同的数据库中的表,此时就需要连建立多个datasource去连接指定的数据库。配置连接多个库的具体实现方法为:

在application.yml文件中,增加dataSources属性配置,里面包含每个具体的数据源配置。如下:

如果需要实现不同的domain类连接操作不同的库,在domain类中static mapping下还需要指定具体连接的库是哪一个,如下:

这样在Aaaaa和Bbbbb两个domain类对应数据信息就分别存放在了指定的数据库中

注意:如果多数据源中有一个数据源名称定义为“dataSource”(“dataSource”也是单数据源使用名称)时,domain类中static mapping下配置的“dataSource”指定名称为“DEFAULT”【datasource "DEFAULT"】,或者不进行配置,不可以配置为:datasource = "datasource"

多数据源时,在service中操作指定数据库时,声明数据源时名称格式为:datasource+【下划线“_”】+【数据源名称】,数据源名称为“dataSource”的除外,数据源名称为“dataSource”的直接将名称定义为““dataSource”【def dataSource】。如:

例子:

 注意:在使用非默认数据源时,如果直接通过Domain类执行数据库操作,需要在具体Domain类的withTansaction{}闭包中执行操作(或withNewSession{}闭包、withNewTransaction{}闭包),目的是将Domain类添加到具体事务中,即使涉及不到事物操作,仅仅是执行查询,也必须这样来写(原因:大致意思是因为操作数据库需要在一个事物中进行);如果多数据源中有一个数据源名称为默认名称“dataSource”,dataSource数据源下的数据库操作不需要做此特殊处理。

如:

        def list1
        def list2
//        这样查询会报错
//        list1 = Bbbbb.list()
//        list2 = Bbbbb.list()

//        需要使用withNewTransaction/withTransaction/withNewSession闭包
        Bbbbb.withNewTransaction{
            list1 =  Bbbbb.list()
        }
        Bbbbb.withTransaction {
            list2 = Bbbbb.list()
        }

//       Aaaaa使用的是默认数据源“dataSource”
        def list3 = Aaaaa.list()
        

猜你喜欢

转载自blog.csdn.net/hxr_lzy/article/details/81432138