我正在尝试在运行时重新加载应用程序的配置。配置位于yaml文件中,与ConfigurationProperties的绑定按预期工作。接下来就是。我想在yaml更改后重新加载配置。或者更确切地说,我正在使用预定的检查文件是否已更改。
我希望避免运行第二台服务器来更新我的环境。我有两个问题:
配置环境
也许?Spring云配置文档说明:
只要您能够实际更改环境并发布事件,EnvironmentChangeEvent就涵盖了一大类刷新用例(这些API是公共的,是核心Spring的一部分)
因此,发布事件是可行的,但我不知道如何实际更新属性。
关于这一点有很多讨论:如何在没有任何配置服务器的情况下刷新属性。这里有一篇戴夫·赛尔(DaveSyer)的帖子,它给我们带来了一些启示,但仍然无法自我解释。
spring boot/-cloud最自然的方法如下(如spring cloud config github所述):
@Component
@ConfigurationProperties("ignored")
@RefreshScope
public class Config {
private List<String> path;
public List<String> getPath() {
return path;
}
public void setPath(List<String> path) {
this.path = path;
}
}
这不起作用,因为RefreshScope和ConfigurationProperties之间存在一些代理问题-这两个注释都会导致bean代理相互冲突。
因此,我开始从Spring的角度来看待它。可以通过环境访问propertySources,因此您可以通过
final String propertySourceName = "externalConfiguration";
// name of propertySource as defined by
// @PropertySource(name = "externalConfiguration", value = "${application.config.location}")
ResourcePropertySource propertySource = new ResourcePropertySource(propertySourceName, new FileSystemResource(file));
MutablePropertySources sources = ctx.getEnvironment().getPropertySources();
sources.replace(propertySourceName, propertySource);
我的用例基于“用户编辑文件”,因此刷新的属性是基于FileSystemWatcher,它改变了属性源。为了让配置bean正确摄取源,bean的范围需要是原型——在每次调用时都要正确重建。
完整的示例可作为要点提供。不包括任何配置服务器。希望有帮助
我们正在使用JBoss Enterprise Application Platform server(即JBoss EAP 6.1)来开发使用Logback进行日志记录的新web应用程序。我们已经使用JBoss EAP好几个月了,一切都很好。此外,正如您所知,您可以在运行时在JBOSS上部署和取消部署应用程序和配置文件(如mail service.xml),也就是说,无需重新启动服务器。 但是,如
我尝试在bean部分中使用环境: 但环境中只有系统属性 所以问题是如何从application.yml加载配置,以及如何以这样的函数式实现@ConfigurationProperties的模拟? 注释、和开始工作。但是注释仅存在于依赖项中,而yml解析类仅存在于中。 在包含依赖项并将添加到beans部分之后,注释开始工作,但也未包含来自application.yml的配置。所以我增加了这一节: 到
问题内容: 如何在不重新启动servlet容器的情况下刷新Spring配置文件? 我正在寻找JRebel以外的解决方案。 问题答案: 对于那些最近在这上面绊脚石的人来说,解决此问题的当前和现代方法是使用Spring Boot的Cloud Config。 只需添加注释你刷新豆类和你的主/配置。 因此,例如,以下Controller类: 在Spring Boot Actuator上(通过HTTP端点或
我正在尝试访问一个没有在我的计算机上下载配置单元的配置单元群集。我在这里读到,我只需要一个jdbc客户机就可以这样做。我有配置单元群集的url、用户名和密码。我尝试用这些创建hive-site.xml,并以编程方式进行,尽管这种方法似乎没有输入用户名和密码的地方。无论我做什么,似乎下面的错误使我无法访问配置单元:无法实例化org.apache.hadoop.hive.ql.metadata.ses
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1
我正在使用Spring Cloud Config服务器,能够检测来自git存储库的更改并将其传递给配置客户机。 有两种方法,我已经实现了: null 所以两者都工作得很好,那么使用Spring Cloud Bus有什么好处吗?或者在生产环境中,不使用Spring Cloud Bus会有什么问题吗?因为将需要额外的工作来设置RabbitMQ集群(HA)作为生产中的Spring云总线。 谢谢,大卫