2015-10-29 13 views
5

Không có tài sản grails.config.locations trong grails 3 nữa, bây giờ Grails 3 sử dụng khái niệm nguồn tài sản của Spring thay vào đó, nhưng làm thế nào tôi có thể đạt được hành vi tương tự trong grails 3 như trong những phiên bản trước? Giả sử tôi muốn ghi đè lên một số thuộc tính property.to.be.overridden trong tệp ứng dụng .với tệp cấu hình bên ngoài của tôi. Tôi làm nó như thế nào?Ghi đè thuộc tính trong application.groovy với cấu hình bên ngoài trong grails 3

Trả lời

2

Tương đương grails.config.locationsspring.config.location

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

Dưới đây là một ví dụ xác định địa điểm cấu hình trong khi tung ra một lọ từ dòng lệnh (Những lập luận tương tự có thể được sử dụng bên trong ide của bạn)

java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties 

Cũng vì bạn đề cập đến việc muốn ghi đè thuộc tính nó là hữu ích để tìm hiểu những cách mùa xuân Boot xử lý cấu hình cụ thể các file tài sản (Nhiều hồ sơ cũng có thể được xác định)

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties

+1

Theo giải thích của Graeme ở đây: http: // grails.1312388.n4.nabble.com/Grails-3-External-config-td4658823.html Bạn có thể sử dụng các thuộc tính. '-Dcom.foo =" test "' ghi đè ** com.foo ** từ application.yaml. Và bạn có thể thêm tệp groovy bên ngoài nếu muốn, xem bài đăng. – olikaf

0

tôi giải quyết này một cách hơi khác nhau, vì vậy tôi có thể tải một file YAML bên ngoài .

Application.groovy

package com.mycompany.myapp 

import grails.boot.GrailsApp 
import grails.boot.config.GrailsAutoConfiguration 
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean 
import org.springframework.context.EnvironmentAware 
import org.springframework.core.env.Environment 
import org.springframework.core.env.PropertiesPropertySource 
import org.springframework.core.io.FileSystemResource 
import org.springframework.core.io.Resource; 

class Application extends GrailsAutoConfiguration implements EnvironmentAware { 
    static void main(String[] args) { 
     GrailsApp.run(Application) 
    } 

    @Override 
    void setEnvironment(Environment environment) { 
     String configPath = System.properties["myapp.config.location"] 
     if (configPath) { 
      Resource resourceConfig = new FileSystemResource(configPath); 
      YamlPropertiesFactoryBean propertyFactoryBean = new YamlPropertiesFactoryBean(); 
      propertyFactoryBean.setResources(resourceConfig); 
      propertyFactoryBean.afterPropertiesSet(); 
      Properties properties = propertyFactoryBean.getObject(); 
      environment.propertySources.addFirst(new PropertiesPropertySource("myapp.config.location", properties)) 
     } 
    } 
} 

Sau đó, tôi xác định file YAML khi tôi chạy nó

dòng lệnh

java -jar -Dmyapp.config.location=/etc/myapp/application.yml build/libs/myapp-0.1.war 
+0

Tôi cung cấp liên kết ở trên (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property -files) và nó đọc rằng bạn cũng có thể chỉ định một tệp yaml mà không cần thực hiện các bước bổ sung này. Điều này có hiệu quả với bạn không? Nó nói rằng bạn cần SnakeYAML trên classpath cho nó để làm việc. – Zergleb

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