我正在开发基于spring框架的java应用程序。
它
每小时为每个客户(A,B,C)完成上述4个过程。
我使用spring JDBC模板来获取这样的数据:
SELECT COL1,COL2,COL3 FROM MySQLTable1 WHERE CLIENTID='A' AND COL4='CONDITION'
并在将每条记录写入Netezza表之前将其读入POJO。
通过调度程序每小时会运行多个此应用程序实例。 因此,客户端A和客户端B可以同时运行,但SELECT将是唯一的, 我的意思是:
的数据SELECT COL1,COL2,COL3 FROM MySQLTable1 WHERE CLIENTID='A' AND COL4='CONDITION'
将与
不同SELECT COL1,COL2,COL3 FROM MySQLTable1 WHERE CLIENTID='B' AND COL4='CONDITION'
但请记住,所有这些都作为POJO存储在内存中。
我的问题是:
感谢您的想法和反馈。
我知道这是使用ETL工具的完美场景,但这超出了范围。
答案 0 :(得分:1)
是否存在数据污染的风险?
这取决于您对数据的处理方式,但如果每个实例都是独立的,我不会看到如何导致数据污染,您只需要确保并发运行的每个实例都不能处理相同的数据(客户ID)。
是否需要使用spring数据事务管理器实现数据库事务?
您可能需要一个事务才能插入Netezza
表。您当然希望数据在结果表中具有一致的状态。如果在进程中间发生错误,您可能希望回滚在失败之前插入的所有内容。关于事务管理器,您并不特别需要Spring
事务管理器,但由于您使用的是Spring
,因此它可能是一个不错的选择。
我的应用程序是否真的需要使用像Spring Batch这样的东西来解决这个问题?
是否确实需要它,可能不是,但是Spring Batch
是针对这类应用程序而制作的,因此它可以帮助您构建应用程序(Spring Batch提供了可重复使用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理)。一切都可以在没有框架的情况下完成,如果你有一个非常小的应用程序,使用它可能会有点过分。但最后,如果你需要这些功能,你可能会想要使用它......
答案 1 :(得分:1)
Spring Batch 是 ETL,因此使用它非常适合这个用例,也是商业ETL工具的一个很好的替代品。
是否存在数据污染的风险?客户端A和B读取单独的数据,因此不会通过意外读取或写入相同的数据来相互干扰。如果创建了具有相同ID的两个客户端,则存在风险,但事实并非如此。
是否需要使用spring数据事务管理器实现数据库事务? 尽管程序化事务管理存在许多缺陷并且最好避免,但没有强制要求这样做。 Spring Batch将为您管理事务,以及其他方面,如分页。
我的应用程序是否真的需要使用Spring Batch来处理这个问题?没有强制要求这样做,虽然它会有很大帮助,特别是在分页方面。您将如何处理返回数千行的查询?没有框架,这需要手动处理。