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

Spring Batch中我的业务逻辑应该在哪里?

习胤运
2023-03-14

我有一个Spring批处理应用程序。我的Spring批处理应用程序由两个步骤组成。

  1. 提取csv数据,添加到记录tbl
  2. 提取记录tbl行,根据数据验证解析到Food tbl。

步骤2使用微线程完成
我需要处理记录行tbl,无论是否验证,当前日期时间都会添加回记录行
a.验证失败,DateTime错误代码也将添加到记录行中
b.通过验证,日期时间添加到记录行中。Row也将添加到食品tbl中。

在步骤2中,我有一个databaseReader和一个databaseWriter。我在哪里实现我的业务逻辑来检查验证是否通过/失败?它将从我的服务类中调用。

我想我的databaseWriter可以从我的服务类中调用添加/更新/删除方法。如果有任何错误,我的databaseWriter会捕获它。根据服务类引发的错误,databaseWriter将决定要解析回记录行的错误代码DateTime。

你的想法是什么?这是一个好的实现吗?

共有2个答案

武琛
2023-03-14

我想我的databaseWriter可以从我的服务类中调用添加/更新/删除方法。如果有任何错误,我的databaseWriter会捕获它。根据服务类引发的错误,databaseWriter将决定要解析回记录行的错误代码DateTime。

按其名称命名的ItemWriter应该只更新您的存储数据(例如数据库)。您可以使用项目读取器-处理器-写入器构建基于块的作业,并将处理器作为业务逻辑,您可以在其中过滤将在写入器上写入的记录基于您的验证。

https://docs-stage.spring.io/spring-batch/docs/current/reference/html/processor.html#filteringRecords

此外,块基作业应处理分区中的数据拆分,以防发生异常,只有一块数据会受到影响。

郎喜
2023-03-14

第2步是使用tasklet完成的。

在步骤2中,我有一个databaseReader和一个databaseWriter。我在哪里实现我的业务逻辑来检查验证是否通过/失败?

我不知道您是在简单的tasklet还是面向块的tasklet中使用这些读写器。但我将使用面向块的tasklet实现步骤2,并使用项目处理器进行验证逻辑。数据验证是项目处理器的典型用例:https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/processor.html#validatingInput.您可以决定拒绝项目或在处理器中过滤项目。

 类似资料:
  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不

  • 我必须从头开始创建RESTAPI。我已经有了一些关于球衣的经验,几乎所有的事情都是手工做的。 我想现在就做,因为这个项目是新的。因此,我目前正在尝试宠物商店示例,每次尝试openapi 3.0在线编辑器时都可以使用该示例。 使用openapi生成器,我为宠物店生成了Spring Boot服务器。 有很多教程会停在那里。我不明白我必须在哪里或如何添加我的业务逻辑代码(数据库访问,......)。 之

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • 我们的业务逻辑代码主要在 controllers 目录中,新建一个 todo.py 文件, 核心代码如下 (完整代码参考这里),代码说明可以参考注释: # -*- coding: utf-8 -*- import flask from flask import request, redirect, flash, render_template, url_for from application.e

  • 我正在使用Spring Boot 1.5.4、Spring Data REST、Spring JPA、Hibernate,并且我正在开发一个使用REST API的Angular客户端。 Spring Data REST有很大帮助,我正在尝试遵循最佳实践,因此存储库如下所示: 我自动完成了所有的save()、delete()和findXX()方法。太好了。 现在我想知道,在保存实体之前,是否需要自定