2012-10-31 80 views
0

我不知道這是可能的,或者說我要去找到解決它的另一種方式,但...Grails的切換配置屬性基於從文件加載另一個屬性

我有一個Grails應用程序它使用Spring-Security-Core作爲其認證系統。有幾個地方最終可能會部署它,不同的地點可能會使用不同的身份驗證提供程序(例如,一些會使用DAO,一些使用LDAP等)。

我希望能夠基於在.properties文件中'auth.type = LDAP'或'auth.type = DAO'。一旦應用程序知道它會是哪一個,那麼需要使用Config.groovy來設置更多的屬性以迎合這一點。

我一直在想着需要config.groovy從.properties文件加載屬性,然後在Config.groovy中使用switch語句中的這些屬性來確定要設置的其他屬性。但是我嘗試了這一點,但我相信在Config文件中,來自.properties文件的屬性會在配置文件中的所有屬性之後加載。這是一個正確的假設嗎?

無論如何,如果任何人的簡單方式知道要做到這一點的影響,將十分感謝

回答

1

你是正確的性質從grails.config.locations文件(常規或屬性)讀取已讀取的僅主Config.groovy後應用。你可以使用自定義的環境,並有東西像

environments { 
    ldapAuth { 
    foo.bar = 'something' 
    } 
    daoAuth { 
    foo.bar = 'something else' 
    } 
} 

,但你必須在生成WAR,你不能建立一個WAR,然後將其配置在運行時不同的環境來指定環境。

如果您有運行你的戰爭,那麼你可以做這樣的事情

def authType = System.getProperty('myapp.auth.type', 'dao') 
// store authType as a real config option as well as a local variable 
auth.type = authType 

switch(authType) { 
    case 'dao': 
    foo { 
     bar = 'something' 
    } 
    break 

    case 'ldap': 
    foo { 
     bar = 'something else' 
    } 
    break 

    default: 
    println "Unrecognised auth type ${authType}" 
} 

或手動讀取.properties文件了(而不是依靠某種方式來指定系統性能到Tomcat(或其他) grails.config.locations

def authProps = new Properties() 
new File('/etc/myapp/auth.properties').withInputStream(authProps.&load) 
def authType = authProps.getProperty('auth.type', 'dao') 
auth.type = authType 

// switch(authType) as before 

一週皺紋 - 在log4j閉包內你會發現你不能訪問authProps變量(我不知道,我還沒有嘗試過)。但是在這個關閉中,你可以可以作爲config訪問完整的配置,所以假如你有auth.type = authType線我已經用在上面,你可以用config.auth.type來代替。

相關問題