2013-08-21 55 views
2

所以我们能够在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" 
     } 
    } 
    production { 
     dataSource { 
      dbCreate = "update" 
      url = "jdbc:h2:prodDb" 
     } 
    } 
} 

但是,有没有办法让我们可以有一定的enviroments共享一些特性,而其他人共享一组不同的,例如具有之间的共享属性集开发者(奥马尔,以及斯金格在这种情况下):

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" 
     } 
    } 
} 

在此先感谢...

+0

见更新我的回答如下。 – dmahapatro

回答

4

除了@ Sergio的方法,你也可以使用datasource如你预期的发展过程中各个用户假设你通过下面这个命令使用run-app

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

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 { 
     //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" 
     } 
    } 
} 

基于上面的设置可以很好地继承datasource_dev默认属性omar environement。

Grails的转换/读取上面的配置,并结束了:

[ 
    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" 
    ] 
] 
+0

是的我知道如何为单独的环境运行代码,我只是想知道他们是否可以继承其他默认数据源的属性,而不是其他环境使用的属性。 –

+0

@JimSosa是的,他们可以。环境块外的任何配置都将可用。 – dmahapatro

+0

嗯...... @DMahapatro,现在我看到了这一点,这是利用多个数据源方面的优势,但这是否意味着我需要更改所有的域类以使用数据源或'ALL'配置。或者我可以在这里做一个全球映射? –

4

我认为你可以做到这一点externalizing you configuration。根据当前环境加载不同的文件。

if(Environment.current in ['omar','stringer']) { 
    grails.config.locations = [ 
    'file: path/to/DevelopersConfig.groovy' 
    ] 
} 

而在你的文件,你可以声明所需的任何配置,包括数据源。

另一种选择是设置单个环境并将其用于两个开发人员。这将消除对外部配置文件的需要。

编辑

现在我再次看到你的配置文件,我认为你只需要调整奥马尔和桁CONFIGS:

omar { 
    dataSource_dev { 
    url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl" 
    } 
} 

因为它是一个不同的数据源不应该是内部的数据源块。寻找at the docs看来你需要设置一个后缀,而不是前缀到你的多个数据源。

+0

LOL。我今天就在尾巴上。 :-)看起来我比你更懒惰的编码器。 :P – dmahapatro

+0

哈哈也许只是你的网络连接较慢:D –

+0

这是一个有趣的解决方案。不知道我喜欢管理单独的配置文件,但它会符合要求。有没有办法在一个配置文件中做到这一点?让开发人员共享一个环境是不行的,因为他们实际上拥有自己的dbs。 –