2015-10-29 6 views
5

Es gibt keine grails.config.locations-Eigenschaft in Grails 3 mehr, jetzt verwendet Grails 3 stattdessen Spring's -Eigenschaft-Quellkonzept, aber wie kann ich das gleiche Verhalten in Grails 3 erreichen, wie es war vorherige Versionen? Angenommen, ich möchte eine Eigenschaft property.to.be.overridden in der Datei application.grovy mit meiner externen Konfigurationsdatei überschreiben. Wie kann ich es tun?Override-Eigenschaft in application.groovy mit externer Konfiguration in Grails 3

Antwort

2

Das Äquivalent von grails.config.locationsspring.config.location

ist

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

Hier ist ein Beispiel Positionen Konfiguration spezifiziert, während ein Glas von der Kommandozeile starten (Die gleichen Argumente können Innenseite der ide verwendet werden)

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

Auch da erwähnen Sie wollen Eigenschaften überschreiben es ist nützlich, um die Art und Weise Frühlings-Boot-Griffe profilspezifische Eigenschaftsdateien

(Mehrere Profile können auch angegeben werden)

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

+1

laufe, wie hier von Graeme erklärt: http: // Grails.1312388.n4.nabble.com/Grails-3-External-config-td4658823.html Sie können Eigenschaften verwenden. '-Dcom.foo =" test "' überschreibt ** com.foo ** von application.yaml. Und Sie können eine externe groovy Datei hinzufügen, wenn Sie möchten, siehe den Beitrag. – olikaf

0

ich das eine etwas andere Art und Weise gelöst zu lernen, so konnte ich eine externe YAML-Datei laden .

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)) 
     } 
    } 
} 

Dann gebe ich die YAML-Datei, wenn ich es

Befehlszeile

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

Ich biete einen Link oben (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property -files) und es liest, dass Sie auch eine yaml-Datei angeben können, ohne dass Sie diese zusätzlichen Schritte ausführen müssen. Hat das nicht für dich funktioniert? Es besagt, dass Sie SnakeYAML auf dem Klassenpfad benötigen, damit es funktioniert. – Zergleb

Verwandte Themen