Grails 3中没有grails.config.locations
属性,现在Grails 3使用Spring的属性源概念,但是如何在grails 3中实现与之前版本相同的行为?假设我想用我的外部配置文件覆盖application.grovy文件中的某些属性property.to.be.overridden
。我该怎么办?
答案 0 :(得分:3)
相当于grails.config.locations
是spring.config.location
下面是一个从命令行启动jar时指定配置位置的示例(这些相同的参数可以在您的ide中使用)
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
此外,由于您提到要覆盖属性,因此了解Spring Boot处理配置文件特定属性文件的方式很有用(也可以指定多个配置文件)
答案 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