You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@Transactional注解timeoutString属性在Repository接口中不生效问题

为什么@Transactional的timeoutString属性在Spring Data Repository接口上不生效?

我尝试为部分Repository操作配置动态可调整的事务超时时间,但该配置未生效。示例Repository代码如下:

@Repository
public interface TransactionRepository extends CrudRepository<Transaction, BigInteger> {

    @Override
    @Nonnull
    @Transactional(timeoutString = "${db.transaction.batchTimeoutSecs}")
    <S extends Transaction> Iterable<S> saveAll(@Nonnull Iterable<S> entities);
}

db.transaction.batchTimeoutSecs属性已在application.yml中定义。但将@Transactional注解放在Service方法上时则可正常工作,示例Service代码如下:

@Override
@Transactional(transactionManager = "oracleTransactionManager", timeoutString = "${db.transaction.batchTimeoutSecs}")
public int applySettlementUpdate(<parameters>...) {
    ...
}

此时属性注入正常,无报错。但调用上述Repository的saveAll方法时会抛出异常,根因如下:

java.lang.IllegalArgumentException: Invalid timeoutString value "${db.transaction.batchTimeoutSecs}" - cannot parse into int

我了解全局事务超时配置方式,目前正通过db.transaction.timeoutSecs进行全局配置,但需要为特定操作覆盖全局配置,因此使用@Transactional的timeoutString属性。若该属性仅在Service方法生效而在Repository方法不生效,我需重构代码单独创建服务类处理这些操作,但我不想这么做,也不理解为何Repository上不生效。


内容的提问来源于stack exchange,提问作者Mike Brennan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:03