内存处理导致数据污染的风险-JAVA
我正在开发基于spring框架的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
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存储在内存中
我的问题是:
我知道这是使用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对抗会造成很大的干扰机会。顺便说一句:要提防“单线程”和静态数据。