spring - 仅针对错误对象的 Spring 事务回滚并为其隐藏堆栈跟踪
问题描述
我有 100 个对象,我想将其保存到数据库。
@Service
public class TestService {
private final TestDao testDao;
public TestService(TestDao testDao) {
this.testDao = testDao;
}
@Transactional
public void saveTest() {
for (int i = 0; i < 100; i++) {
Test test = new Test();
if (i == 10 || i == 20) {
test.setName("123");
} else {
test.setName(UUID.randomUUID().toString());
}
testDao.save(test);
}
}
}
我对名称列有 uniq 约束,如果我尝试用某个名称保存 2 个对象 - 我会遇到异常。
我需要保存 99 个对象(uniw 名称)并跳过 1 个名称重复的对象。但是,如果我尝试插入重复,我会得到 Ecxeption 和事务回滚所有对象。我改变了我的 dao savee() 方法:
@Slf4j
@Repository
public class TestDao {
@PersistenceContext
private EntityManager entityManager;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void save(Test test) {
entityManager.persist(test);
}
}
Propagation.REQUIRES_NEW - 在每个对象上启动内部事务并且 rollbak 只复制对象。它很好。但是在日志中打印此异常堆栈跟踪/如何隐藏此堆栈跟踪?
解决方案
推荐阅读
- php - 如何使用混淆的“SERVER_SOFTWARE”确定 PHP 中的服务器类型
- node.js - 无法读取未定义的属性“catch”
- java - Android:按月计算总和和分组(SQLite)
- r - 如何使用 ggplot2 在 R 中格式化带有轴标签和旋转的雷达图
- python - 如何解决'发生异常:TypeError coercing to Unicode: need string or buffer, tuple found' in Python
- laravel - 如何用他在 Laravel 中的关系返回一个模型?
- vim - 为什么 Vim 用红色突出显示我所有的 JSON 注释?
- reactjs - 如何检查上传的图像是否真的是图像
- python - 在 keras 上使用 evaluate_generator 的准确度得分不一致
- php - 在 PHP 中使用 CURL 查询 ElasticSearch 时遇到问题