在datasource.groovy中共享环境设置 [英] Sharing environment settings in datasource.groovy

查看:78
本文介绍了在datasource.groovy中共享环境设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我们可以在datasource.groovy文件中创建不同的环境设置。我们可以在环境节点之外放置常见的设置,如

  dataSource {
pooled = false
driverClassName =org.h2.Driver
username =sa
password =
}
environments {
development {
dataSource {
dbCreate =create-drop
url =jdbc:h2:mem:devDb
}
}
test {
dataSource {
dbCreate =update
url =jdbc:h2:mem:testDb
}
}
生产{
dataSource {
dbCreate =update
url =jdbc:h2:prodDb
}
}
}

但是有没有办法让我们可以让某些环境共享一些属性,而其他的则共享一组不同的属性,例如在开发者之间共享一组属性(在这种情况下为Omar和Stringer):

  dev_dataSou rce {
pooled = false
driverClassName =oracle.jdbc.driver.OracleDriver
username =dev
password =dev
}
dataSource {
pooled = true
driverClassName =org.h2.Driver
username =sa
password =something
}
环境{
omar {
dataSource {
dev_dataSource {
url =jdbc:oracle:thin:@ omardb.wire.com:1521:devl
}


stringer {
dataSource {
dev_dataSource {
url =jdbc:oracle:thin:@ stringerdb.wire.com:1521:devl



devint {
dataSource {
dbCreate =create-drop
url =jdbc:h2: mem:devDb

}
test {
dataSource {
dbCreate =update
url =jdbc:h2:mem:testDb
}
}
生产{
dataSource {
dbCreate =update
url =jdbc:h2:prodDb
}
}
$ b

预先感谢...

datasource ,假设您使用了 run-app

  grails -Dgrails.env = omar run-app //使用Omar的数据源
grails -Dgrails.env = stringer run-app //使用Stringer的数据源

UPDATE

定制数据源以访问 datasource_dev 的方法有点棘手这里。您必须小心ConfigSlurper读ConfigObject的方式。

  dataSource_dev {
pooled = false
driverClassName =oracle.jdbc.driver.OracleDriver
username =dev
password =dev
}
dataSource {
pooled = true
driverClassName =org.h2.Driver
username =sa
password =something
}
environments {
omar {
//如果您只想使用dev的数据源
// dataSource {
dataSource_dev {
url =jdbc:oracle:thin:@ omardb.wire.com:1521:devl
}
//}
}
stringer {
//如果你只想使用dev的数据源
// dataSource,你不需要这个{
dataSource_dev {
url =jdbc:oracle:thin:@ stringerdb.wire.com:1521:devl
}
//}
}
devint {
dataSource {
dbCreate =create-drop
url =jdbc:h2:mem:devDb
}
}
test {
dataSource {
dbCreate =update
url =jdbc:h2:mem:testDb
}
}
生产{
dataSource {
dbCreate =update
url =jdbc:h2:prodDb
}
}
}
$ b $ p基于上述设置,您可以非常好地继承 datasource_dev 中的 omar默认属性 environement。



Grails转换/读取上述配置并结束于:

 [
dataSource_dev:[
pooled:false,
driverClassName:oracle.jdbc.driver.OracleDriver,
username:dev ,
密码:dev,
url:jdbc:oracle:thin:@ omardb.wire.com:1521:devl//< - Omar's setting
],
dataSource:[
pooled:true,
driverClassName:org.h2.Driver,
username:sa,
password :something
]
]


So we are able to create different environment settings in the datasource.groovy file. And we can put common settings outside the environments node like so

dataSource {
   pooled = false
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = ""
}
environments {
    development {
        dataSource {
            dbCreate = "create-drop"
           url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

But is there a way to so that we can have certain enviroments share some properties while others share a different set of properties such as having a shared set between developers (Omar, and Stringer in this case):

dev_dataSource {
   pooled = false
   driverClassName = "oracle.jdbc.driver.OracleDriver"
   username = "dev"
   password = "dev"
}
dataSource {
   pooled = true
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = "something"
}
environments {
    omar {
        dataSource {
            dev_dataSource {
                url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl"
            }
        }
    }
    stringer {
        dataSource {
            dev_dataSource {
                url = "jdbc:oracle:thin:@stringerdb.wire.com:1521:devl"
            }
        }
    }
    devint {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

Thanks in advance...

解决方案

In addition to @Sergio's approach, you can also use datasource as you have expected for respective users during development assuming you use run-app by following this command:

grails -Dgrails.env=omar run-app //uses Omar's datasource
grails -Dgrails.env=stringer run-app //uses Stringer's datasource

UPDATE
The way to tailor the datasource in order to access datasource_dev is bit tricky here. You have to take care the way ConfigSlurper reads the ConfigObject.

dataSource_dev {
   pooled = false
   driverClassName = "oracle.jdbc.driver.OracleDriver"
   username = "dev"
   password = "dev"
}
dataSource {
   pooled = true
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = "something"
}
environments {
    omar {
        //You do not need this if you only want to use dev's datasource 
        //dataSource { 
            dataSource_dev {
                url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl"
            }
        //}
    }
    stringer {
        //You do not need this if you only want to use dev's datasource
        //dataSource {
            dataSource_dev {
                url = "jdbc:oracle:thin:@stringerdb.wire.com:1521:devl"
            }
        //}
    }
    devint {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

Based on the above setup you can very well inherit the default properties from datasource_dev for omar environement.

Grails converts/reads the above configuration and ends up with:

[
    dataSource_dev: [
        pooled: false,
        driverClassName: "oracle.jdbc.driver.OracleDriver",
        username: "dev",
        password: "dev",
        url: "jdbc:oracle:thin:@omardb.wire.com:1521:devl"  //<-- Omar's setting
    ],
    dataSource: [
        pooled: true,
        driverClassName: "org.h2.Driver",
        username: "sa",
        password: "something"
    ]
]

这篇关于在datasource.groovy中共享环境设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆