无法在Spring Boot中加载外部属性

时间:2015-10-08 05:24:05

标签: spring groovy gradle spring-boot

我有一个非常基本的spring boot命令行应用程序,我试图从我的项目中存在的application.yml文件加载属性。该项目使用gradle构建,我使用groovy作为语言。

现在无论我放置application.yml文件,我似乎都无法将其值分配给配置属性bean。文件如下

application.yml

my:
  name: "some name"
  servers:
    - dev.bar.com
    - foo.bar.com

Config.groovy中

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
@ConfigurationProperties(prefix = "my")
public class Config {

    private List<String> servers = new ArrayList<String>();
    private String name

    public List<String> getServers() {
        return this.servers;
    }

    public String getName() {
        return this.name
    }
}

Worker.groovy 命令行运行

@Component
class Worker implements CommandLineRunner {

    @Autowired
    Config config

    @Override
    public void run(String... args) throws Exception {
        println "Running a test app"
        println config.name
        println config.getServers()
    }
}

目录结构

app-name
  -build.gradle
  -src
    -main
      -groovy
        -config
          -application.yml
        -com
          -company
            -app
              Worker.groovy
              Config.groovy
              Application.groovy

我还尝试将application.yml重命名为application.properties,并将其添加到com.company.app项目下,但是worker类的run方法始终将该属性打印为null。我相信我可能错过了一些非常基本的东西,但似乎无法找到它的内容。

如果我需要提供任何其他详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

application.yml应该在src/main/resources/config之下。

src/main/resources目录处理(复制)资源。

默认情况下,groovy插件会忽略src/main/groovy中除groovy类之外的其他类。