以下是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上。
答案 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;
}