内存处理导致数据污染的风险-JAVA

内存处理导致数据污染的风险-JAVA,java,spring,Java,Spring,我正在开发基于spring框架的java应用程序 它 连接到MySQL数据库 从POJO中的MySQLTable1获取数据 在内存中操纵(更新、删除)它 插入到Netezza数据库表中 以上4个过程每小时为每个客户机(A、B、C)执行一次 我使用spring JDBC模板获得如下数据: SELECT COL1,COL2,COL3 FROM MySQLTable1 WHERE CLIENTID='A' AND COL4='CONDITION' 并将每条记录读入POJO,然后再将其写入Netezz

我正在开发基于spring框架的java应用程序

  • 连接到MySQL数据库
  • 从POJO中的MySQLTable1获取数据
  • 在内存中操纵(更新、删除)它
  • 插入到Netezza数据库表中
  • 以上4个过程每小时为每个客户机(A、B、C)执行一次

    我使用spring JDBC模板获得如下数据:

    SELECT COL1,COL2,COL3 FROM MySQLTable1 WHERE CLIENTID='A' AND COL4='CONDITION'
    
    并将每条记录读入POJO,然后再将其写入Netezza表

    每小时将有多个应用程序实例通过调度程序运行。 因此客户端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存储在内存中

    我的问题是:

  • 是否存在数据污染风险?
  • 是否需要使用spring数据事务管理器实现数据库事务?
  • 我的应用程序真的需要使用Spring Batch之类的工具来处理这个问题吗?
  • 我感谢你的想法和反馈


    我知道这是使用ETL工具的完美方案,但这超出了范围。

    是否存在数据污染风险?

    这取决于您对数据所做的操作,但我不认为如果每个实例都是独立的,那么您只需确保并发运行的每个实例都不使用相同的数据(客户端ID)

    是否需要使用spring数据事务管理器实现数据库事务?

    您可能需要一个事务来插入到
    Netezza
    表中。您当然希望数据在结果表中具有一致的状态。如果在过程中间出现错误,您可能希望回滚所有在它失败之前插入的内容。关于事务管理器,您并不特别需要
    Spring
    事务管理器,但由于您使用的是
    Spring
    ,因此它可能是一个不错的选择

    我的应用程序真的需要使用Spring Batch之类的工具来处理这个问题吗?

    它真的需要它吗,可能不需要,但是
    Spring批处理
    是为这类应用程序设计的,所以它可能会帮助您构建应用程序(Spring Batch提供了在处理大量记录时必不可少的可重用功能,包括日志/跟踪、事务管理、作业处理统计、作业重启、跳过和资源管理)。任何东西都可以在没有框架的情况下制作,如果你有一个非常小的应用程序,那么使用它可能会有点过头。但最后,如果你需要这些功能,你可能会想使用它…

    Spring Batch是ETL,所以使用它将非常适合这个用例,也是商业ETL工具的一个很好的替代品


    是否存在数据污染的风险?客户端a和B读取单独的数据,因此它们决不会通过意外读取或写入相同的数据而相互干扰。如果创建了两个具有相同ID的客户端,则会有此风险,但情况并非如此

    是否需要使用spring数据事务管理器实现数据库事务? 虽然programatic事务管理有许多缺陷,最好避免,但没有强制要求这样做。Spring Batch将为您管理事务以及其他方面,如分页


    我的应用程序真的需要使用Spring Batch之类的工具来处理这个问题吗?没有强制要求这样做,尽管这会有很大帮助,特别是在分页方面。您将如何处理返回数千行的查询?如果没有框架,这需要手动处理。

    如果您担心的话关于数据污染,您需要为每个客户机运行一个单独的JVM。除了您自己的编码错误,Java对象无法“污染”你们确实需要提防DB,虽然我不熟悉Spring,但是多个线程同时与一个DB对抗会造成很大的干扰机会。顺便说一句:要提防“单线程”和静态数据。