Java 在Spring+;mysql
目前,我们的应用程序使用Spring、SimpleJdbcTemplate和MySQL 使用的数据源是org.apache.commons.dbcp.BasicDataSource,url属性为“rewriteBatchedStatements=true” 在使用Java 在Spring+;mysql,java,mysql,spring,jdbctemplate,Java,Mysql,Spring,Jdbctemplate,目前,我们的应用程序使用Spring、SimpleJdbcTemplate和MySQL 使用的数据源是org.apache.commons.dbcp.BasicDataSource,url属性为“rewriteBatchedStatements=true” 在使用SimpleJdbcTemplate.batchUpdate(List)进行批插入期间,输入批中将存在重复记录(基于我们正在生成的表的主键) 在重复记录场景下,是否可以 1) 插入所有非重复记录并获得有关成功插入次数的响应 或 2) 完
SimpleJdbcTemplate.batchUpdate(List)
进行批插入期间,输入批中将存在重复记录(基于我们正在生成的表的主键)
在重复记录场景下,是否可以
1) 插入所有非重复记录并获得有关成功插入次数的响应
或
2) 完全回滚batchInsert,是否不应插入任何记录
我们可以使用mysql的“INSERT IGNORE”部分实现第一个需求。但是SimpleJdbcTemplate.batchUpdate()
会将每个记录返回为已更新的记录。(无法仅捕获插入的记录计数,忽略重复项)
为了达到第二个要求,我们必须关闭“rewriteBatchedStatements”。但在性能测试后,该参数已被微调。所以我们不能将其设置为“false”
在第一行中提到的我们正在使用的组件的约束范围内,是否可能实现上述两种情况之一
我对spring和jdbc世界还不熟悉,所以详细的解释会帮助我们更好。
谢谢
1) 插入所有非重复记录并获得有关成功插入次数的响应
=>您可以插入所有非重复记录,并获得响应batchUpdate()
返回int[]
即整数数组,表示批(插入/更新)中受每次更新影响的行数
2) 完全回滚批插入不应插入记录
=>由于batchInsert将位于单个事务中,因此将插入所有记录或不插入任何记录。如果事务被提交,则将插入所有记录。如果发生任何异常,如果您使用spring事务管理(使用@Transactional
注释或基于spring aop的tx通知),事务将自动回滚。在这里确保设置了BasicDataSource.defaultAutoCommit=false
1) 插入所有非重复记录并获得有关成功插入次数的响应
=>您可以插入所有非重复记录,并获得响应batchUpdate()
返回int[]
即整数数组,表示批(插入/更新)中受每次更新影响的行数
2) 完全回滚批插入不应插入记录
=>由于batchInsert将位于单个事务中,因此将插入所有记录或不插入任何记录。如果事务被提交,则将插入所有记录。如果发生任何异常,如果您使用spring事务管理(使用@Transactional
注释或基于spring aop的tx通知),事务将自动回滚。在这里确保设置了BasicDataSource.defaultAutoCommit=false