如何在 Spring 引导应用程序中使用配置 (properties/yml) 文件中的属性?

How can I use properties from a configuration (properties/yml) file in my Spring Boot application?

如何在我的 Spring 应用程序中使用外部配置?

package hello.example2.Container

import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.client.RestTemplate

@RestController
class ContainerController {
    @RequestMapping("/container/{cid}")
    public list(@PathVariable Integer cid) {
        def template = new RestTemplate();
        def container = template.getForObject("http://localhost:5050/container/" + cid.toString(), Container);
        return container;
    }
}

我想用配置选项替换“http://localhost:5050”(f.e。application.yml 或 application.properties)。

这是我的申请文件(Groovy):

package hello.example2

import groovy.transform.CompileStatic
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.context.annotation.Configuration

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@CompileStatic
class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我尝试设置“@Configuration”和“@EnableAutoConfiguration”,但老实说我不知道​​它们在做什么。我是 Java/Groovy 和 Spring 框架的新手(但不是一般编程)。

我已阅读这些页面,但没有完整的示例,只有片段:

[1] http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

[2]https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

在您的配置文件(application.yml 或 application.properties)中添加一个新条目:

endpointUrl: http://localhost:5050

然后将 属性 注入你的控制器:

@RestController
class ContainerController {

    @Value("${endpointUrl}")
    private String ednpointUrl;

    @RequestMapping("/container/{cid}")
    public list(@PathVariable Integer cid) {
        def template = new RestTemplate();
        def container = template.getForObject(endpointUrl+"/container/" + cid.toString(), Container);
        return container;
    }
}

虽然上面回答了你的问题。我不太相信这一点。 让我一一阐述:

@Configuration:您可以通过两种方式设置 spring 配置。 a) 使用 xml 文件。 b) 并使用 Java 配置 class.

要使用 Java class 作为 spring 的配置文件,您需要添加 @Configuration 注释。在此配置 class 中,现在您可以使用 @Bean 标记指定 bean。使用 @Scope 注释将范围指定为 singleton or prototype。以及使用 xml 配置文件可以做的一切。

此外,广大社区不喜欢将 xml 用于配置,因此,他们更喜欢在 java class 中配置 spring。

@EnableAutoConfiguration:来自springboot框架。它会自动配置常规或预期的配置,这些配置以后可能会被覆盖。基本上,它明智地配置默认所需的默认 beans,使用不同的 java 配置 classes 来实现不同的默认配置。

Regarding externalising configuration:您可以将配置外部化到 application.properties 或 application.yml。以下应该是位置。

  1. 当前目录的 /config 子目录。
  2. 当前目录
  3. 一个class路径/配置包
  4. class路径根

以上按先后顺序排列。因此,如果配置目录存在于当前项目目录下。它的优先级最高。

下面我添加了我的应用程序的树状图。可能有帮助。

vinayprajapati@localhost:~/Desktop/project/gradleSpringBoot$ tree
.
├── build.gradle
├── gradleSpringBoot.iml
└── src
    ├── main
    │   ├── groovy
    │   │   └── org.test
    │   │       ├── components
    │   │       │   └── TestComponent.groovy
    │   │       ├── configuration
    │   │       │   └── BaseConfiguration.groovy
    │   │       |
    │   │       └── utils
    │   │           ├── AppConfig.groovy
    │   │           └── AppInfo.groovy
    │   ├── java
    │   │   └── org
    │   │       └── test
    │   │           ├── GradleSpringBootApplication.java
    │   │           └── HelloController.java
    │   └── resources
    │       ├── application-qa.yml
    │       ├── application-uat.yml
    │       ├── application.properties
    │       ├── application.yml
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── org
                └── test
                    └── GradleSpringBootApplicationTests.java

您似乎遇到了故障排除问题。

让我们做一件事。将配置文件放在上面树图中的资源中,并从项目的所有其他地方删除它。这样做的原因是根目录或 /config 子目录中的任何配置文件具有更高的优先级,因此会覆盖 classpath.

中的配置