2009-06-09 33 views
34

Grails 1.x cho phép sử dụng các tệp cấu hình bên ngoài bằng cách đặt chỉ thị grails.config.locations. Có cách tiếp cận tương tự có sẵn để bên ngoài cấu hình cơ sở dữ liệu trong Datasource.groovy (không thiết lập JNDI) không?Externalizing Grails Cấu hình datasource

Sẽ hữu ích khi có thể định cấu hình thông tin xác thực DB trong tệp cấu hình đơn giản bên ngoài ứng dụng.

Cảm ơn trước!

Trả lời

50

Bạn có thể sử dụng tệp thuộc tính được chỉ định trong grails.config.locations như một cách để bên ngoài cấu hình nguồn dữ liệu. Dưới đây là cách tôi thường thiết lập một dự án Grails:

Trong DataSource.groovy của tôi, tôi chỉ định này cho môi trường sản xuất:

.... 
    .... 
    production { 
    dataSource { 
     dbCreate = "update" 
     driverClassName = "com.myorg.jdbcDriverNotExists" 
     url = "" 
     username = "" 
     password = "" 
    } 
    } 
    .... 
    .... 

tôi chỉ định nộp đơn thuộc tính bên ngoài trong Config.groovy tôi:

grails.config.locations = [ "classpath:app-config.properties"] 

trong tập tin thuộc tính (lưu trữ trong grails-app/conf /) tôi chỉ định các thông tin nguồn dữ liệu thực tế:

dataSource.driverClassName=oracle.jdbc.OracleDriver 
dataSource.url=jdbc:oracle:thin:@host:port:sid 
dataSource.username=sa 
dataSource.password=secret 

Tôi cũng sử dụng tệp thuộc tính như một cách để ghi đè các giá trị khác trong Config.groovy. Khi ứng dụng được triển khai, nếu tôi phải sửa đổi thông tin nguồn dữ liệu, tôi chỉ chỉnh sửa tệp /WEB-INF/classes/app-config.properties và khởi động lại.

+0

Điều này trông giống như những gì tôi đã làm sau! Cảm ơn bạn đã trả lời rõ ràng và súc tích của bạn, John :) – miek

+10

Điều này trông giống như một giải pháp tuyệt vời, ngoại trừ bạn có các chỉnh sửa sau khi nâng cấp. Để bung ra cấu hình, hãy xem http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration –

+0

Như Brad đã chỉ ra, đây không phải là giải pháp khả thi để triển khai một cuộc chiến . Liên kết anh đăng là câu trả lời hay hơn. – Mike

24

Câu trả lời ở trên không thực sự cấu hình bên ngoài. Anh ấy thân thiết, nhưng cấu hình vẫn nằm trong ứng dụng. Tôi sẽ sử dụng môi trường JVM var khi khởi động ứng dụng/máy chủ để trỏ đến một vị trí bên ngoài ứng dụng nơi cấu hình bên ngoài cư trú. Đọc ra môi trường var trong tệp config.groovy và sử dụng nó để lấy tệp cấu hình bên ngoài. Một cái gì đó như thế này:

def extConfig = System.properties.getProperty('ENVVAR'); 
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"] 
1

Đối với tôi điều này không hiệu quả. Để có được một biến môi trường. sử dụng

tốt hơn:

System.getenv().get("ENVVAR").toString() 
0

Chỉ cần đặt vị trí tập tin cấu hình như sau trong Config.groovy nộp

grails.config.locations = [ 
      "file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties", 
      "file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy", 
      "classpath:${appName}-${Environment.current.name}-datasource.properties", 
      "classpath:${appName}-${Environment.current.name}-config.groovy" 
    ] 

Và đặt tất cả các chi tiết về nguồn dữ liệu và các giá trị cấu hình khác trong thích hợp của bạn tập tin. Do đó bạn có thể mở rộng cấu hình và không cần khởi động lại để thay đổi giá trị.

Các vấn đề liên quan