Spring Boot @Transactional 翻译
Translation of SpringBoot @Transactional
在我的代码中,我有一个带有 updatePerson(Age age, Address address)
的接口。从 3 个不同的控制器调用此方法。现在由于控制器 1 中的某些要求,我不得不将一个附加字段传递给此方法,如 updatePerson(Age age, Address address, Experience experience)
.
为了避免在其他2个controller中传递updatePerson(Age age, Address address, null)
,我想到了将这个方法转换为我接口中的默认方法,并在内部调用另一个方法。所以我的界面现在看起来像:
public interface PersonService
{
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}
PersonDO updatePerson(Age age, Address address, Experience experience);
}
现在的问题是:
在这个接口的实现中,将原来的updatePerson
注解为@Transactional
。我知道如果一个普通方法调用一个用 @Transactional
注释的方法,事务就不会工作,因为它由 spring.
处理
所以在现在的实现中我有 updatePerson(Age age, Address address, Experience experience)
用 @Transactional 注释。
直接调用updatePerson(Age age, Address address, Experience experience)
的controller,会在事务中执行。但是我不确定当控制器调用 default updatePerson(Age age, Address address)
并在内部调用已实现的方法时会发生什么?执行是否仍然发生在交易中?
您可以将 @Transactional
添加到默认方法,因此它也会在事务中
@Transactional
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}
在我的代码中,我有一个带有 updatePerson(Age age, Address address)
的接口。从 3 个不同的控制器调用此方法。现在由于控制器 1 中的某些要求,我不得不将一个附加字段传递给此方法,如 updatePerson(Age age, Address address, Experience experience)
.
为了避免在其他2个controller中传递updatePerson(Age age, Address address, null)
,我想到了将这个方法转换为我接口中的默认方法,并在内部调用另一个方法。所以我的界面现在看起来像:
public interface PersonService
{
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}
PersonDO updatePerson(Age age, Address address, Experience experience);
}
现在的问题是:
在这个接口的实现中,将原来的updatePerson
注解为@Transactional
。我知道如果一个普通方法调用一个用 @Transactional
注释的方法,事务就不会工作,因为它由 spring.
所以在现在的实现中我有 updatePerson(Age age, Address address, Experience experience)
用 @Transactional 注释。
直接调用updatePerson(Age age, Address address, Experience experience)
的controller,会在事务中执行。但是我不确定当控制器调用 default updatePerson(Age age, Address address)
并在内部调用已实现的方法时会发生什么?执行是否仍然发生在交易中?
您可以将 @Transactional
添加到默认方法,因此它也会在事务中
@Transactional
default PersonDO updatePerson(Age age, Address address) {
return updatePerson(Age age, Address address, null);
}