当server.port和management.port不同时,无法获取/刷新使用spring-cloud-client

时间:2016-09-18 16:42:56

标签: spring-boot spring-cloud spring-cloud-config

以下是spring-boot应用程序的application.properties

class DocumentForm(forms.ModelForm):
    class Meta(object):
        model = Document
        fields = 'name', 'file'

    def save(self, commit=True):
        saved_document = super().save(commit)
        with open(saved_document.file.path + '.json', mode='w') as fh:
            fh.write(json.dumps({
                "size": saved_document.file.size,
                "uploaded": timezone.now().isoformat()
            }))
        return saved_document

当我启动应用程序时,它会联系config-server并按预期加载属性。

我修改了配置服务器上的属性,并使用

触发应用程序的刷新
spring.application.name=test-service
server.port=8080

management.port=8081
management.context-path=/admin

spring.cloud.config.uri=http://localhost:8888
endpoints.refresh.enabled=true
endpoints.restart.enabled=true

API打印已更改的属性的名称。

当我进入房产时,我仍然看到旧值

curl -X POST http://localhost:8081/admin/refresh

我触发重启并获取新的属性值

curl -X GET http://localhost:8081/admin/env/{property_name}

当我尝试使用

更改属性值时,请参阅相同的行为
curl -X POST http://localhost:8081/admin/restart 

当我尝试获取属性值时,我仍然看到旧值

curl -X POST  http://localhost:8081/admin/env -d property1=123

当我将management.port更改为8080(与server.port相同)时,一切都按预期工作。

预计会出现这种情况吗?在我看来,它正在修改2个不同的环境,一个用于运行在8080上的服务器,另一个用于运行在8081上。

2 个答案:

答案 0 :(得分:0)

请您分享您的pom.xml和应用程序主(Entry)文件。无论我们可以使用不同的端口。如果您能够在" / refresh"中获得更改的属性然后调用它也应该在你的应用程序中工作。你确定你在你的bean中使用@RefreshScope吗?

注意:@RefreshScope不适用于@Configuration注释。有关详细信息,请参阅文档https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html

答案 1 :(得分:0)

看起来是spring-boot的问题。

当server.port和management.port不同时,EnvironmentEndpoint和EnvironmentMVCEndpoint会注入2个不同的环境。

应用程序环境具有更新的值,但是当我获得特定属性EnviromentMVCEndpoint的值时,它不会在其环境中反映正确的值

@GetMapping(value = "/{name:.*}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@HypermediaDisabled
public Object value(@PathVariable String name) {
    if (!getDelegate().isEnabled()) {
        // Shouldn't happen - MVC endpoint shouldn't be registered when delegate's
        // disabled
        return getDisabledResponse();
    }
    return new NamePatternEnvironmentFilter(this.environment).getResults(name);
}

@Override
public void setEnvironment(Environment environment) {
    this.environment = environment;
}