当前位置: 首页 > 面试题库 >

我可以在没有Spring AppContext的情况下手动加载@ConfigurationProperties吗?

苏振国
2023-03-14
问题内容

有什么方法可以在@ConfigurationProperties不直接使用Spring
Context的情况下加载带有标记的类?基本上,我想重用Spring所做的所有智能逻辑,但是对于在bean生命周期之外手动实例化的bean。

我有一个可以在Spring(引导)中愉快地加载的bean,可以将其注入到其他Service bean中:

@ConfigurationProperties(prefix="my")
public class MySettings {
    String property1;
    File property2;
}

详情参见春天docco http://docs.spring.io/spring-boot/docs/current-
SNAPSHOT/reference/htmlsingle/#boot-features-external-config-command-line-
args

但是现在我需要从Spring之外(由Hibernate创建)的类访问该bean。该类是在应用程序启动过程的早期创建的,以至于Spring
Boot尚未通过经典的查找帮助器方法或“我自己拥有”的静态引用使应用程序上下文可用。

所以我想做些类似的事情:

MySettings mySettings = new MySettings(); 
SpringPropertyLoadingMagicClass loader = new SpringPropertyLoadingMagicClass();
loader.populatePropertyValues(mySettings);

并且让MySettings最终从命令行,系统属性,app.properties等加载了其所有值。Spring中是否有某个类可以执行类似的操作,或者是否与应用程序上下文交织在一起?

显然,我可以自己加载Properties文件,但是我真的想让Spring Boot的逻辑始终使用命令行变量(例如–my.property1 =
xxx),系统变量,application.properties甚至是yaml文件作为。以及围绕轻松绑定和类型转换的逻辑(例如,property2是一个File),因此它们的工作方式与在Spring上下文中使用时完全相同。

可能还是梦想?

谢谢你的帮助!


问题答案:

您正在寻找的“魔术”课是PropertiesConfigurationFactory。但是我会问您是否需要它-
如果只需要绑定一次,那么Spring应该能够为您完成它,并且如果您遇到生命周期问题,最好解决这些问题(以防它们破坏其他东西)。



 类似资料:
  • 问题内容: 我刚刚收到Java更新通知,说Update 17已经发布,所以我运行了更新,发现只有我的公共JRE被更新了。我仍然只有JDK的Update 16。 有没有办法自动提供最新的JDK? 当然,更新不应该放弃旧版本。这应该手动完成,因为Eclipse仍在使用旧版本。更新设置后,我将手动删除旧的JDK。 问题答案: 不在Windows上。如果要通过带有自动更新程序的Linux发行版来获取JDK

  • 问题内容: 我正在学习d3。有某些方法可以在d3 js 中加载数据。但是他们似乎都进行了HTTP GET。在我的场景中,我已经在字符串中包含了json数据。如何使用此字符串代替发出另一个http请求?我试图为此寻找文档,但没有找到。 这有效: 现在,如果我有: 如何在d3中使用已计算的“ myjson”并避免对服务器的异步调用?谢谢。 问题答案: 只需将通话替换为 IE浏览器: 更新09/2013

  • 我正在使用Transform创建一个windows安装包,使其成为多实例。我的mst文件更新了某些注册表项组件的产品代码和GUID。这是每台机器安装。现在我无法卸载我的产品,如果: 我的mst文件从其原始位置删除 TransformsSecure策略设置为1 安装程序尝试在原始位置查找mst文件,但无法执行此操作,卸载失败。在这两种情况下,我可以做什么让我的产品卸载? 一些额外信息。我看到我的ms

  • 我在我的Android应用程序中使用JSch,我想创建一个SSH连接,而无需最初提供用户名和密码。如果我提供用户名和密码,我可以连接,但如果我不提供用户名,我会从JSch得到一个用户名没有给出“错误”。 这是我试图在不提供用户名和密码的情况下连接的。 我唯一的选择是将JSch的源代码更改为允许,编译成jar,然后导入它吗?

  • 在我当前的项目中,我使用Envers 5.2.12审核实体更改。由于安全限制,我必须手动创建审核表和reinfo表,它们不能包含外键。如果我在没有外键引用的情况下创建它们,这会影响Envers的正常行为吗?

  • 问题内容: 据我所知,没有主方法就无法执行,因为运行Java程序时。Java虚拟机将查找main方法。如果JVM无法找到main方法,它将显示运行时错误。线程main中的异常找不到main类。 但是我搜索了许多博客,其中一些人说,是的,如果Java程序中有静态块,则可以通过静态博客来完成,类加载器会在Java调用main()方法之前加载所有静态块! 真的有可能吗?它们的可用性如何? 问题答案: 现