2009-05-09 34 views
9

Tôi đang phát triển Grails Plugin đầu tiên của tôi. Nó phải truy cập một webservice. Plugin rõ ràng sẽ cần url webservice. Cách tốt nhất để cấu hình điều này mà không mã hóa cứng nó vào các lớp Groovy là gì? Nó sẽ được tốt đẹp với cấu hình khác nhau cho các môi trường khác nhau.Cấu hình của Grails Plugin

Trả lời

7

Nếu chỉ có một (đọc: một mặt hàng) nhỏ của nó tùy chọn cấu hình, nó chỉ có thể là dễ dàng hơn để húp trong nộp tài sản. Nếu có một số tùy chọn cấu hình và một số tùy chọn cấu hình nên động, tôi khuyên bạn nên làm những gì mà plugin Acegi Security thực hiện - thêm tệp vào /grails-app/conf/plugin_name_config.groovy có lẽ.

thêm tiền thưởng là người dùng có thể thực thi mã groovy để tính tùy chọn cấu hình của họ (tốt hơn nhiều so với sử dụng tập tin thuộc tính), cũng như có khả năng làm môi trường khác nhau một cách dễ dàng.

séc ra http://groovy.codehaus.org/ConfigSlurper, đó là những gì Grails nội bộ sử dụng để húp configs như config.groovy.

//e.g. in /grails-app/conf/MyWebServicePluginConfig.groovy 
somePluginName { 
    production { 
     property1 = "some string" 
    } 
    test { 
     property1 = "another" 
    } 
} 

//in your myWebServicePlugin.groovy file, perhaps in the doWithSpring closure 
GroovyClassLoader classLoader = new GroovyClassLoader(getClass().getClassLoader()) 
ConfigObject config 
try { 
    config = new ConfigSlurper().parse(classLoader.loadClass('MyWebServicePluginConfig')) 
} catch (Exception e) {/*??handle or what? use default here?*/} 
assert config.test.property1.equals("another") == true 
+0

ý tưởng lạ để có tập tin cấu hình riêng biệt chỉ dành riêng cho một tài sản, 'Config.groovy' nên được sử dụng cho tài sản đó. – tig

+2

@tig AFAIK, 'Config.groovy' được bỏ qua khi plugin được đóng gói và thay vì thử nghiệm plugin hơn là định cấu hình plugin, phải không? – peterp

13

Bạn có thể muốn giữ đơn giản (tm). Bạn có thể xác định URL trực tiếp trong Config.groovy-bao gồm mỗi môi trường settings- và truy cập nó từ plugin của bạn như mong muốn bằng grailsApplication.config (trong hầu hết các trường hợp) hoặc một đối tượng ConfigurationHolder.config (Xem thêm details in the manual).

Là một tiền thưởng thêm rằng thiết lập cũng có thể được định nghĩa trong các tập tin bất động sản Java tiêu chuẩn hoặc trên các tập tin cấu hình khác quy định tại grails.config.locations.

ví dụ: trong Config.groovy

// This will be the default value... 
myPlugin.url=http://somewhe.re/test/endpoint 
environments { 
    production { 
    // ...except when running in production mode 
    myPlugin.url=http://somewhe.re/for-real/endpoint 
    } 
} 

sau, trong một dịch vụ được cung cấp bởi các plugin của bạn

import org.codehaus.groovy.grails.commons.ConfigurationHolder 
class MyPluginService { 
    def url = ConfigurationHolder.config.myPlugin.url 
    // ... 
} 
Các vấn đề liên quan