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

标签 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。我相信我可能已经错过了一些非常基本的东西,但是似乎找不到它所拥有的东西。

让我知道是否需要提供其他详细信息。

最佳答案

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

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

默认情况下,groovy插件会忽略src/main/groovy中的groovy类。

关于spring - 无法在Spring Boot中加载外部属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33007260/

相关文章:

spring - 无法在 spring 中将 bean 注入(inject)具有特定名称的 JSF 托管 bean

grails - useOriginalMessage()和多个 'from'节点

groovy - 无法在 HttpBuilder 版本 0.7.1 中使用ignoreSSLIssues

android-studio - Gradle 错误 : Path is not a readable directory for an Android Project saved in OneDrive

android - DexException:多个dex文件定义

java - Spring Boot 无法启动 Tomcat 8

spring - Spring 中的 MessageInterpolator

java - BindingResult 和 bean 的普通目标对象都不能用作请求属性

Groovy 和 Spock : toDouble vs toFloat

android - Gradle 多模块依赖 - 一起使用 api 和 testImplementation