当前位置: 首页 > 知识库问答 >
问题:

@刷新范围不使用外部配置文件

鲜于星波
2023-03-14

我在pom中添加了以下依赖项,以便使用Spring云

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter</artifactId>
    </dependency>

  <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

spring-cloud.version芬奇利

这是我打算刷新的bean:

@Component
@ConfigurationProperties(ignoreUnknownFields = true,prefix="global")
@PropertySource(value = "${spring.config.location}")
@Getter
@Setter
@Validated
@RefreshScope
public class GeneralProperties {
    private String mode;
}

访问控制器中的bean:

@RestController
@RequestMapping
@RefreshScope
public class AppController {

    private static final AnalyticsLogger LOGGER = AnalyticsLoggerFactory
            .getLogger(AppController.class);

    @Autowired
    SimulatorRequestProcessor simulatorRequestProcessor;

    @Autowired
    GeneralProperties generalProperties;

    @ResponseBody
    @PostMapping(value = "/api/mock-getdata", produces = "application/json")
    public String fetchResponseBasedOnMode(@RequestHeader HttpHeaders headers,
            @RequestBody String request) {
        String response = null;
        LOGGER.info("color: "+color);
        switch (generalProperties.getMode()) {
         //code

在应用程序配置中设置的属性:

 spring.config.location=file:///var/lib/data/demo/config/generalConfig.properties
 management.endpoints.web.exposure.include=refresh

无法刷新模式的值。有人能指出这段代码中的错误吗?我的属性文件位于未在git中提交的文件夹中,因此我没有使用spring-cloud d-config。

共有1个答案

上官兴昌
2023-03-14

把它放在src/main/resources/application中。属性

management.endpoints.web.exposure.include=*

使用这个参数运行这个程序--spring.config.additional位置=/tmp/application.properties

package com.example.demorefreshscopeexternalfile;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.style.ToStringCreator;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@EnableConfigurationProperties(DemorefreshscopeexternalfileApplication.MyProps.class)
public class DemorefreshscopeexternalfileApplication {

    @Autowired
    MyProps props;

    @RequestMapping
    public String message() {
        return props.getMessage();
    }

    public static void main(String[] args) {
        SpringApplication.run(DemorefreshscopeexternalfileApplication.class, args);
    }

    @ConfigurationProperties("my")
    public static class MyProps {
        private String message;

        public String getMessage() {
            return this.message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        @Override
        public String toString() {
            return new ToStringCreator(this)
                    .append("message", message)
                    .toString();

        }
    }
}

tmp/应用程序的内容。属性

my.message=message from /tmp

查看http://localhost:8080

/tmp/application.properties可以更新,发布到/执行器/刷新并再次查看8080,您将看到更新的值。

内置boot 2.2.4和Hoxton。SR1

请参阅https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html/appendix-application-properties.html#common-application-propertiesspring.config.*及其含义。

 类似资料:
  • 上一个示例仅展示了java硬编码式的配置,更多的应用场景是使用外部配置文件,灵活配置调度策略,以便于随时改变调度策略,如下是外部配置的代码示例: cron4j=task1, task2 task1.cron=* * * * * task1.class=com.xxx.TaskAaa task1.daemon=true task1.enable=true task2.cron=* * * * *

  • 问题内容: 我是新手。我想在几分钟后使用$ timeout of angular刷新范围。我正在开发一个社交应用程序,需要在几分钟后刷新通知范围。使用服务从http请求获取通知。 JS: } 现在,如何在几分钟后发出http请求,让我们说1分钟并刷新通知范围。我尝试使用$ timeout,但工作不正常。 问题答案: 但我建议将其移至控制器。 这似乎是一个更好的体系结构。 通过,解决或拒绝诺言将成为

  • Java类: 应用yml公司 应用程序模拟ecom。yml公司 当我击中时,http://localhost:8080/hello,我得到的回应是“Hello mock api.com!”。 如果我从应用程序中删除模拟的ecom。然后调用刷新后api调用http://localhost:8080/refresh要刷新上下文,我希望得到“Hello dev api.com!”但我收到了“你好,moc

  • 问题内容: 我正在开发Java桌面应用程序,并且想要一个外部configuration.xml。 我正在使用Netbeans开发应用程序,并尝试将config.xml文件添加到dist目录中,以使其驻留在应用程序工作文件夹中。但是,当Netbeans执行其清理操作时,它将删除dist目录, 我应该在何处放置此configuration.xml文件,以便它不会被删除并存在于应用程序启动目录中。 问题

  • 主要内容:spring.config.location,示例 1,spring.config.additional-location,示例 2除了默认配置文件,Spring Boot 还可以加载一些位于项目外部的配置文件。我们可以通过如下 2 个参数,指定外部配置文件的路径: spring.config.location  spring.config.additional-location  spring.config.location 我们可以先将 Spring Boot 项目打包成 JAR

  • 我构建了一个访问数据库并从中提取数据的Spring-Boot应用程序。一切正常,但我想从外部. Properties文件配置表名。 比如: 我想找点东西,但没找到。 您可以使用注释访问外部属性。 所以我的问题是:有没有办法配置表名?或者我可以更改/拦截hibernate发送的查询吗? 解决方案: 好的,hibernate 5适用于。所以我创建了自己的。 此外,这篇关于NamingStrategy的