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

是否在Spring中从PropertySourcesPlaceHolderConfigurer中查找运行时的动态属性?

史承福
2023-03-14

不知道最好的方法。我们已经创建了一个可供不同项目使用的jar。依赖此jar的其他项目需要提供在其spring属性文件中定义的某些属性。(我们的jar不应该关心他们给这些属性文件起什么名字。)

int val = getSomeVal();
String propNeeded = foo.getProperty("foo."+val+".dynamic.prop");

我不介意让这个特定的服务类成为ApplicationContextAware,但是如果我这样做了,我如何能够访问底层的PropertySourcesPlaceholderConfigurer?我会“看起来”吗?是否需要动态访问属性?

另一种选择是我强制jar的用户使用一个可以查找的名称来声明bean

    <util:properties id="appProps" location="classpath:application.properties"  />

然后我将appProps作为属性注入并从那里向上看。但是我不喜欢这种方法,因为它迫使库的用户用一个通用的ID来命名文件。我认为最好的解决方案是以某种方式获得服务类中底层PropertySourcesPlaceHolderConfigureer的句柄...我只是不知道该怎么做?

为什么Spring不允许通过XML配置定义PropertySource,然后我就可以注入环境了?

谢谢你的建议,如何完成我想要的。

共有1个答案

郁鸿博
2023-03-14

您可以声明ReloadableResourceBundleMessageSource从与PropertySourcesPlaceHolderConfigurer相同的源读取。这样,您就可以@autowire MessageSource(或者使bean实现MessageSourceAware)并使用它检索属性。

使用ReloadableResourceBundleMessageSource的主要原因是检索I18N消息,因此这将有点刺耳。

 类似资料:
  • 问题内容: 我有这个独特的要求来检查给定的节点是否正在运行作业。我正在考虑使用groovy,因为它看起来是最简单的选择。 它使我能够找到从站是否在线。对我来说,下一步是检查它是否正在运行作业。 我正在考虑使用API函数setAcceptingTasks(false)来将slave标记为正在运行作业,以便下次当我使用isAcceptingTasks()查询时,我会得到false,因此不会在该slav

  • 我想检查某个程序是否在计算机启动时运行,我为此访问了类: 输出确实是,因为该程序实际上是在windows启动时运行的,但是当我通过禁用该程序启动时(它的状态变为),下次我运行上面的代码时,结果仍然是,尽管该程序不再是启动程序的一部分。 这让我得出了一个简单的结论,当windows任务管理器禁用启动程序时,它不会删除注册表项中的项,而是更改了它的另一个值..但是我无法找到那个更改的值。 我希望有人能

  • 问题内容: 在maven中,使用以下语法在pom中设置属性非常容易: 现在,我需要构建一个取决于pom版本的属性。为了创建属性,我想执行以下操作(java伪代码): 它应该是动态的,因为它在我们的存储库中用作标记名,并且必须始终与工件的版本同步。 任何想法如何创建该“动态”属性? 问题答案: Mojo的Build-Helper Maven插件可以在这里为您提供帮助。 有许多目标可用于帮助转换属性。

  • 我想实现一个有五个可选变量的搜索函数,并且在每个组合中,所以一个开关/案例不是一个可能的方法。所以我不能使用构建在Spring启动函数,因为它们不是动态的(如果我错了,请纠正我)。我知道crudrepository中有@查询注释,但是没有办法用可选参数编写查询?我试图用jpa编写我自己的数据库访问,没有Spring启动CrudRepository的帮助。我在手册中读到这应该可以工作: 但问题是,我

  • 问题内容: 我想知道以下情况是否可能。出于测试目的,我希望在应用程序上下文中为不同的测试声明不同的模拟类。这些是使用Jersey REST客户端的验收测试。有没有办法在运行时动态声明bean?Spring是否有API允许在加载上下文后更改应用程序上下文? 问题答案: 关于第一个问题,你可以在运行时通过BeanDefinitionRegistry.registerBeanDefinition()方法

  • 我是一个快乐的jOOQ用户已经有一段时间了。在我的应用程序中,我从不更新或删除任何内容。我总是插入一个新行,这样整个历史记录总是可用的。该应用程序具有时间机器模式,允许查看给定日期的数据。 实体的模式类似于 表格 实体的所有不变属性