针对注解的事务的例子说明:
PROPAGATION_REQUIRES_NEW:
执行结果描述:如下例子执行结果是save方法的数据保存到了数据库,save1的数据未保存到数据库。
结果总结:save1重新启动了一个事务,其执行失败不会影响其他的事务.只是回滚自己所在事务。
接口类:UserService
package com.spring.service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.spring.po.User;
public interface UserService{
@Transactional(propagation=Propagation.REQUIRED)
public void save();
@Transactional(propagation=Propagation.NEW)
public void save1();
}
接口实现类:UserServiceImpl
package com.spring.service;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import com.spring.po.User;
public class UserServiceImpl implements UserService{
private JdbcTemplate JdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.JdbcTemplate = new JdbcTemplate(dataSource);
}
public void save(){
JdbcTemplate.update(" insert into User(username,password) values('55555','555555') ");
}
public void save1(){
int i=1/0;
JdbcTemplate.update(" insert into User(username,password) values('6666666','6666666') ");
}
}
测试类:
package com.spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.spring.po.User;
import com.spring.service.UserService;
public class Test{
public static void main(String[] args){
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/applicationContext.xml");
UserService s=(UserService)ctx.getBean("userService");
s.save();
s.save1();
}
}
PROPAGATION_NESTED:
执行结果描述:如下例子执行结果是save方法数据提交,save1数据回滚。如果try catch去掉,则save整个方法都回滚,save1数据也不会提交。
接口:UserService
package com.spring.service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.spring.po.User;
public interface UserService{
@Transactional(propagation=Propagation.REQUIRED)
public void save();
@Transactional(propagation=Propagation.NESTED)
public void save1();
}
实现类:UserServiceImpl
package com.spring.service;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import com.spring.po.User;
public class UserServiceImpl implements UserService{
private JdbcTemplate JdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.JdbcTemplate = new JdbcTemplate(dataSource);
}
public void save(){
JdbcTemplate.update(" insert into User(username,password) values('55555','555555') ");
try {
save1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void save1(){
int i=1/0;
JdbcTemplate.update(" insert into User(username,password) values('6666666','6666666') ");
}
}
测试类:
package com.spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.spring.po.User;
import com.spring.service.UserService;
public class Test{
public static void main(String[] args){
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/applicationContext.xml");
UserService s=(UserService)ctx.getBean("userService");
s.save();
}
}