繁体   English   中英

如何在Spring Boot应用程序中使用配置(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;
    }
}

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

这是我的应用程序文件(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 :您可以通过两种方式设置弹簧配置。 a)使用xml文件。 b)并使用Java Configuration类。

要将Java类用作spring的配置文件,需要添加@Configuration批注。 在此Configuration类中,现在可以使用@Bean标记指定bean。 使用@Scope注释将范围指定为singleton or prototype 您可以使用xml配置文件执行所有操作。

此外,一个广泛的社区不喜欢用于配置的xmls,因此,他们更喜欢在java类中配置spring。

@EnableAutoConfiguration :来自springboot框架。 它会自动配置传统或预期的配置,以后可以覆盖。 基本上,它明智地使用不同的Java配置类为不同的默认配置配置默认所需的默认bean。

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

  1. 当前目录的A / config子目录。
  2. 当前目录
  3. 一个classpath / config包
  4. 类路径根

以上是按优先顺序排列的。 因此,如果config目录存在于当前项目目录下。 它将具有最高优先权。

下面我要添加我的应用程序的树形图。 可能这有帮助。

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子目录中的任何配置文件具有更高的优先级,因此将覆盖类路径中的配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM