我有一个Spring (Boot)应用程序,它执行一些繁重的NLP文本处理。我正在寻找一种方法,通过预先加载一些模型来优化性能,而且只需要加载一次。
场景
有一个@Service,它由几种分析文本的方法组成(例如,提取关键字)。预先训练的模型将由我在服务中使用的NLP框架加载,这需要大量的时间和内存。这些模型可以重用,因此不需要每次都加载它们。最有效的方法是加载它们一次,并将它们保存在内存中。您还可以假设模型是线程安全的。
问题
定义单例并在启动时初始化它的最佳方式是什么?
目前,我在我的服务上使用@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON),但据我所知,不能保证服务将在启动时初始化。我也尝试过@Configuration,但没有找到解决方案。
发布于 2016-12-27 12:19:20
FactoryBeans可以支持单例和原型,可以在需要时懒惰地创建对象,也可以在启动时急切地创建对象。
发布于 2016-12-27 00:01:48
据我所知,如果您使用"@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)“,那么您的服务将在启动时初始化。有关更多信息,请参阅以下帖子:@Singleton @Startup fully Asynchronous?
发布于 2016-12-27 00:09:46
在您的服务的一个方法上使用@PostConstruct注释,它将在实例创建后被调用。
https://stackoverflow.com/questions/41333502
复制相似问题