2013-08-21 75 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。 –