我想在spring boot应用程序的应用程序上下文中存储一个特定的变量(String或Object)。但我不想使用xml或属性文件来存储它。
将有一个函数将数据存储在应用程序上下文中。我应该能够检索,修改,删除或添加更多数据。
基本上我想在初始化完成后将数据存储在应用程序上下文中。
答案 0 :(得分:1)
如果您创建一个类并在其上添加@Configuration
注释。并声明一些带有@Bean
注释的bean,它们不会成为应用程序管理的bean吗?
@Configuration
public class ConfigurationClass {
@Bean("myString")
public String getString() {
return "Hello World";
}
然后在代码中的某处,您可以调用AnnotationConfigWebApplicationContext.getBean("myString")
来获取您的bean。
现在可能存在并发问题(如davidxxx所述)。为此你可以SimpleThreadScope
。查看此link以了解如何将其注册到应用程序上下文以及放置该注释的位置(或谷歌)。
或者如果您不想处理,那么@Scope("request")
应该会有所帮助。带有@Scope("request")
的bean将被创建用于任何新的传入请求,因此它的安全线程是安全的,因为它是在每次有新请求进入时创建的。
答案 1 :(得分:0)
作为一般方法,您应该避免创建有状态的服务
将应用程序数据存储在服务器内存中会使其更难以恢复,自主但也可以分布和扩展。
此外,Spring Beans并非设计为有状态
如果这样做,您可能会遇到没有所需同步的竞争条件。
关于您的需求,如果您想在启动时真正拥有有状态服务,请创建您自己的单例实例并同步应该是线程安全的方法。
然后从任何地方访问它。