如何使用事务java

时间:2018-06-01 06:22:04

标签: java exception exception-handling

我做这样的事情:

try {
            client.restoreFromClusterSnapshot(req);
        } catch (AmazonRedshiftException e) {
            txUtils.execute((ts) -> {
                redshiftDto.setStatus(ResourceStatus.FAILED);
                redshiftDto.setStatusDetails(e.getMessage());
                redshiftDto.setUpdatedOn(Timestamp.from(Instant.now()));
                this.rdao.merge(redshiftDto);
                return null;
            });
            LOGGER.error("CANNOT START REDSHIFT- " + e.getErrorMessage());
            throw new AmazonRedshiftException( "CANNOT START REDSHIFT- "
              + e.getErrorMessage());

        }

在这段代码中,如果我因为终止我的交易而抛出错误,我就无法设置数据库变量。如果我发表评论,那么它将起作用并且我的数据库值将被设置。但是我不能扔任何东西。我该怎么做 - (在DB中抛出和设置值)

1 个答案:

答案 0 :(得分:0)

我要做的是使用finally条款。

AmazonRedshiftException exception = null;
try {
    cluster = client.restoreFromClusterSnapshot(req);
} catch (AmazonRedshiftException e) {
    exception = e;
    LOGGER.error("CANNOT START REDSHIFT- " + e.getErrorMessage());
    throw new AmazonRedshiftException( "CANNOT START REDSHIFT- "
          + e.getErrorMessage());
} finally {
    if(exception != null) {
        txUtils.execute((ts) -> {
            redshiftDto.setStatus(ResourceStatus.FAILED);
            redshiftDto.setStatusDetails(exception.getMessage());
            redshiftDto.setUpdatedOn(Timestamp.from(Instant.now()));
            this.rdao.merge(redshiftDto);
            return null;
        });
    }
}