public class XXXService{
@Transactional
public void a(){
b();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void b(){
}
}
方法a调用b,b设置的传播性不会生效,一般采用将b方法写在另外一个service中,由XXXService去调用新的serivce方法,但是有些麻烦,
可以写成
public class XXXService{
@Transactional
public void a(){
XXXService service= (XXXService)AopContext.currentProxy();
service.b();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void b(){
}
}
因为我的是spring boot项目,在启动类上添加此注解配置
@EnableAspectJAutoProxy(exposeProxy = true)
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
//----------------------华丽的分割线---------------------------------
金额为BigDecimal时,如果金额是整数,比如50.00 ,springmvc会输出 50 而不是50.00
一种方法是将BigDecimal改成float或double, 但是要调整类的数据类型,
可以采用另一种写法,
新建一个类,继承JsonSerializable
public class CustomBigDecimalSerializer extends JsonSerializer<BigDecimal>{
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
if(value==null){
gen.writeString("");
return;
}
gen.writeString(value.toString());
}
}
在要返回的对象属性上添加注解即可
@JsonSerialize(using = CustomBigDecimalSerializer.class)
private BigDecimal totalMoney;
此方法不需要修改配置,而且不影响其他的BigDecimal的json输出,只有打了注解的才行