了解Spring事务边界

我正在尝试通过以下示例来消除我对Spring Transaction边界的怀疑。

@Transactional(propagation=Propagation.REQUIRES_NEW)

public void test() {

test1();

test2();

}

@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=false)

public void test1() {

this.jdbcTemplate.execute("INSERT INTO TEST VALUES('T', 'C2', 0, 1)");

}

@Transactional(propagation=Propagation.SUPPORTS, isolation=Isolation.READ_UNCOMMITTED, readOnly=true)

public void test2() {

System.out.println(this.jdbcTemplate.queryForInt("select count(*) from TEST"));

}

我想将test2()方法与test1()隔离开,即每次调用test()时,test2()都不应读取test1()提交的数据。请建议是否可以使用传播或隔离属性来处理这种情况。

提前致谢。

回答:

事务属性应用于外部调用,而不是由bean方法(例如您的案例)进行的内部调用。如果要将事务边界应用于调用,则应注入如下所示的bean实例。但是我认为这不是一个好习惯,我不建议这样做。正确的方法是定义另一个spring

bean,并将其与您以前的bean关联,然后将测试方法放入该新bean。

@Service("yourBean")

@Transactional

public class YourBeanClass implement IYourBean {

@Resource(name="yourBean")

IYourBean yourBean;

@Transactional(propagation=Propagation.REQUIRED)

public void test() {

yourBean.test1();

yourBean.test2();

}

@Transactional(propagation=Propagation.REQUIRED)

public void test1() {

this.jdbcTemplate.execute("INSERT INTO TEST VALUES('T', 'C2', 0, 1)");

}

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public void test2() {

System.out.println(this.jdbcTemplate.queryForInt("select count(*) from TEST"));

}

}

解决这个特殊问题的替代的更好的方法;

 @Service("otherBean")

@Transactional

public class OtherBeanClass implement IOtherBean {

@Autowired

IYourBean yourBean;

@Transactional(propagation=Propagation.REQUIRED)

public void test() {

yourBean.test1();

yourBean.test2();

}

}

@Service("yourBean")

@Transactional

public class YourBeanClass implement IYourBean {

@Transactional(propagation=Propagation.REQUIRED)

public void test1() {

this.jdbcTemplate.execute("INSERT INTO TEST VALUES('T', 'C2', 0, 1)");

}

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public void test2() {

System.out.println(this.jdbcTemplate.queryForInt("select count(*) from TEST"));

}

}

以上是 了解Spring事务边界 的全部内容, 来源链接: utcz.com/qa/412792.html

回到顶部