使用grails 3中的外部配置覆盖application.groovy中的属性

时间:2015-10-29 17:31:18

标签: grails spring-boot grails-3.0

Grails 3中没有grails.config.locations属性,现在Grails 3使用Spring的属性源概念,但是如何在grails 3中实现与之前版本相同的行为?假设我想用我的外部配置文件覆盖application.grovy文件中的某些属性property.to.be.overridden。我该怎么办?

2 个答案:

答案 0 :(得分:3)

相当于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

下面是一个从命令行启动jar时指定配置位置的示例(这些相同的参数可以在您的ide中使用)

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

此外,由于您提到要覆盖属性,因此了解Spring Boot处理配置文件特定属性文件的方式很有用(也可以指定多个配置文件)

  

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

答案 1 :(得分:0)

我解决了这个方法略有不同,所以我可以加载一个外部YAML文件。

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

然后我在运行时指定YAML文件

命令行

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