java - 如何在 Spring 批处理应用程序中创建 List OR ArrayList 对象单例。java - 如何在java spring batch/boot中将字段注释为单例
问题描述
我正在编写一个 Spring 批处理应用程序,其中有块/任务来处理多个记录。如果我有 100 条记录要处理,则执行多个块来处理所有记录。假设在第一个块/任务中,前 25 条记录存储在 ArrayList 中并进行处理,下一个块/任务执行以存储和处理接下来的 25 条记录,依此类推。
我想以这样的方式设计 ArrayList ,它应该存储来自当前块/任务的记录以及先前执行的块/任务的记录,而不是每次为执行的每个 Batch 步骤创建新对象。对于这种情况,我需要将 ArrayList 设为单例对象,这样只有一个 ArrayList 实例存在,并且我可以拥有以前的记录,也可以存储来自当前块/任务的新记录。
我曾尝试使用Collection::singletonList()但它返回不可变而不是“Singleton”对象。我也尝试使用诸如@Scope之类的注释,但它给出了编译错误 - “'@Scope' 不适用于字段”
解决这个问题的可能方法是什么?对于这个 UseCase ,我创建单例列表的方法是否正确?
解决方案
Static-Final 无济于事,因为静态将为 2 个任务加载两次类,并且每次加载类时都会创建 List 的实例。但我找到了解决方案,这对我有用:我创建了一个 bean,它将返回列表对象,并在我想要访问该 bean 的类中按名称自动连接,这样每次它都会返回相同的实例数组列表
例子:
Class MyList
{
@Bean
public List getMyListInst()
{
return new ArrayList();
}
}
//下面的类,我们要使用上面的列表
class UserClass
{
@Autowire
private List getMyListInst; // Use the same name as given in above Bean
....
....
}
推荐阅读
- aws-lambda - Terraform:为什么这种链接资源的尝试不起作用?
- java - 对多个 aar 使用相同的 .jar。在同一个项目中
- python - 从具有特定索引和过滤的 pandas df 中获取值
- php - Ubuntu 16.04 权限被拒绝
- r - 返回连续值符合条件的行
- go - for 循环 while time.Now() 到达
- html - 如何通过存储服务器端的 asp:Listview 在 aspx 页面之间传递 Eval 值?
- javascript - 在 InDesign 脚本中调整合并单元格
- google-chrome - 覆盖 navigator.bluetooth.requestDevice() 的默认行为
- php - ajax 请求测试 emai