美文网首页
06-spring源码解析之声明式事务

06-spring源码解析之声明式事务

作者: 刘小刀tina | 来源:发表于2020-01-26 11:44 被阅读0次

    声明式事务:
    环境搭建:

    1. 导入相关依赖:数据源,数据驱动, Spring-jdbc模块
      2.配置数据源,JdbcTemplate(Spring提供的简化数据数据库操作的工具)操作数据
      3.给方法上标注@Transactional表示当前方法是一个事物方法
      4.@EnableTransactionnal 表示当前方法是一个事务方法
      5.配置事务管理器 来控制事务
    @Data
    public class User {
    
        private  String id;
        private String name;
        private String age;
    }
    ========================================================
    
    @Repository
    public class UserDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void insert(){
            String sql="insert into user (id,name,age) values(?,?,?)";
            String id = UUID.randomUUID().toString().substring(0, 5);
            jdbcTemplate.update(sql,id,"tina",20000);
        }
    
    }
    ========================================================
    @Service
    @EnableTransactionManagement //开启基于注解的事务管理功能
    public class UserService {
    
        @Autowired
        private UserDao userDao;
    
        @Transactional
        public void insert(){
            userDao.insert();
            System.out.println("新增数据成功!");
            int i = 3/0;
        }
    
    
    }//类的大括号
    ========================================================
    @Configuration//表明是一个配置类
    @ComponentScan(value = "com.tina.spring0123.tx")//指定扫描的包
    @PropertySource(value = {"classpath:user.properties"})
    public class TxConfig {
        @Value("${user.user}")
        private String user;
    
        @Value("${user.password}")
        private String password;
    
        @Value("${user.url}")
        private String url;
    
        @Value("${user.driverClass}")
        private  String driverClass;
    
        @Bean //将数据源作为组件注册到容器中
        public  DataSource dataSource() throws PropertyVetoException {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setUser(user);
            dataSource.setPassword(password);
            dataSource.setJdbcUrl(url);
            dataSource.setDriverClass(driverClass);
            return dataSource;
        }
    
        @Bean//配置JdbcTemplate并注册到容器中
        public JdbcTemplate jdbcTemplate() throws PropertyVetoException {
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
            return jdbcTemplate;
        }
    
        @Bean //配置事务管理器管理事务, 并将事务管理器注册到容器中
        public PlatformTransactionManager TransactionManager() throws PropertyVetoException {
            return new DataSourceTransactionManager(dataSource());
        }
    
    
    }//类的大括号
    
    ========================================================
    @SpringBootTest
    public class IocTestTx {
    
        @Test
        public void TEST(){
            //读取配置类生成容器
            ApplicationContext ioc = new AnnotationConfigApplicationContext(TxConfig.class);
            //获取容器中的所有组件
            String[] names = ioc.getBeanDefinitionNames();
            for (String name:names) {
                System.out.println(name);
            }
        }
    
        @Test
        public void TEST2(){
            //读取配置类生成容器
            ApplicationContext ioc = new AnnotationConfigApplicationContext(TxConfig.class);
            //根据类获取容器中对应的组件
            UserService userService = ioc.getBean(UserService.class);
            userService.insert();
    
        }
    
    }//类的大括号
    
    

    相关文章

      网友评论

          本文标题:06-spring源码解析之声明式事务

          本文链接:https://www.haomeiwen.com/subject/hwrjthtx.html