gpt4 book ai didi

java - Spring Transaction - noRollbackFor 在发生异常时不会提交

转载 作者:行者123 更新时间:2023-12-04 05:59:41 24 4
gpt4 key购买 nike

如果我收到电子邮件异常,我希望不要回滚事务。

我正在使用 HibernateTransactionManager

set  property name="nestedTransactionAllowed" value="true"

因为我有嵌套事务。

也因为我打电话 this.getService()我已经设定
lookup-method name="getService" bean="enrollmentProcessorService" .

这样我应该得到Spring Proxy。

但如果发生异常,事务仍会回滚。
我的代码是这样的:
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void processConfirmation() throws SystemException {
//do something
this.getService().processConfirmationData(as400ContractId);


}
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {MailException.class})
public void processConfirmationData(final long as400ContractDataId) throws SystemException {
final AS400ContractData as400ContractData = this.readAS400ContractData(as400ContractDataId, false);

this.populateEnrollmentOptionAnswers(as400ContractData.getContractData());

final PersonalData personalData = this.readPersonalData(as400ContractData.getContractData()
.getEpiphanyPersonalData().getPersonalData().getId(), true);

try {
personalData.setConfirmMailSent(true);
as400ContractData.getContractData().getEpiphanyPersonalData().getPersonalData().setConfirmMailSent(true);
this.personalDataDAO.flush();
this.emailService.sendConfirmationMailToLOI(as400ContractData); //commit if exception is thrown here
} catch (final DataAccessException dae) {
LOGGER.error(CANNOT_UPDATE_PERSONAL_DATA_OBJECT, dae);
throw new SystemException(StringUtils.EMPTY, CANNOT_UPDATE_PERSONAL_DATA_OBJECT, dae);
} catch (final MessagingException e) {
LOGGER.error(CANNOT_SEND_CONFIRMATION_EMAIL, e);
throw new SystemException(StringUtils.EMPTY, CANNOT_SEND_CONFIRMATION_EMAIL, e);
} catch (final MailException e) {
Throwable rootCause = e.getRootCause();
System.out.println("caught");

最佳答案

首先,您捕获异常,因此 Spring 拦截器无法看到它并回滚事务。

然后,即使你没有捕获它,你也已经用 **no**RollbackFor = {MailException.class} 配置了该方法。 .这意味着您 不要如果抛出此异常,则需要回滚。使用 rollbackFor = {MailException.class}反而。

关于java - Spring Transaction - noRollbackFor 在发生异常时不会提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com