【发布时间】:2017-09-29 05:57:32
【问题描述】:
我正在使用 spring-boot(1.4.1) 和 hibernate(5.0.1.Final)。我注意到,当我尝试从 @TransactionalEventListener 处理程序中写入数据库时,调用被简单地忽略了。读取调用工作得很好。
当我说忽略时,我的意思是数据库中没有写入,也没有日志。我什至启用了 log4jdbc,但仍然没有日志,这意味着没有创建休眠会话。据此,我认为,在 spring-boot 的某个地方,我们确定它是一个事务事件处理程序并忽略了一个 write 调用。
这是一个例子。
// This function is defined in a class marked with @Service
@TransactionalEventListener
open fun handleEnqueue(event: EnqueueEvent) {
// some code to obtain encodeJobId
this.uploadService.saveUploadEntity(uploadEntity, encodeJobId)
}
@Service
@Transactional
class UploadService {
//.....code
open fun saveUploadEntity(uploadEntity: UploadEntity, encodeJobId: String): UploadEntity {
// some code
return this.save(uploadEntity)
}
}
现在,如果我通过注释来强制执行新事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
saveUploadEntity
建立了一个新的连接事务,一切正常。
我不喜欢在删除此写入时日志中完全静默(再次读取成功)。是否存在已知错误?
如何启用处理程序来启动新事务?如果我对我的 handleEnqueue 事件执行 Propogation.Requires_new,它就不起作用。
此外,启用 log4jdbc 成功记录读/写我在春天有以下设置。
谢谢
【问题讨论】:
标签: spring hibernate spring-boot kotlin spring-transactions