zoukankan      html  css  js  c++  java
  • spring 事务

    @component
    public class FooServiceImpl implements FooService{
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
    
        @Override
        @Transactional
        public void insertRecord(){
            jdbcTempalte.eccute("INSERT INTO FOO (BAR) VALUES('AAA')");
        }
    
    
        @Overrive
        @Transactional(rollbackFor = RollbackException.calss)
        public void insertThenRollback(){
            jdbcTemplate.excute("INSERT INTO FOO (BAR) VALUES ('BBB')");
            throw new RollbackException();
        }
    
        @Overrive
        public void invokeInsertThenRollback() throws RollbackException{
            insertThenRollback();
        }
        //要想上面这个方法添加上事务
        第一步:注入实例
          @Autowired
        private FooService fooService;
        //把自己的实例注入进来,比较方便理解
        @Override
        public void invokeInsertThenRollbackBySelfService() throws RollbackException {
            fooService.insertThenRollback();
        }
        //获取当前代理,这样写避免了自己调用自己的实例
        @Override
        public void invokeInsertThenRollbackByAopContext() throws RollbackException {
            ((FooService) (AopContext.currentProxy())).insertThenRollback();
        }
        //再加一层事务
        @Transactional(rollbackFor = RollbackException.class)
        @Override
        public void invokeInsertThenRollbackAddTransactional() throws RollbackException {
            insertThenRollback();
        }
    
    }
    
    
    
    Public class DeclarativeTransactionDemApplication implements CommandLineRunner{
        @Autowried
        private FooService fooService;
        @Autowried
        private JdbcTemplate jdbcTemplate;
    
        public static void main (String[] args){
            SpringApplication.run(DeclarativeTransactionDemApplication.class);
        }
    
        @Override
        public void run(String... args){
            fooSerive.insertRecord();
    
            log.info("AAA {}",jdbcTemplate.queryForObject("SELECT COUNT(*) FROM FOO WHERE BAR ='AAA'",Long.class));
    
            //结果 1
    
            try{
                fooService.insertThenRollback();
            }catch(Exception e){
                log.info("BBB {}",jdbcTemplate.queryForObject("SELECT COUNT(*) FROM FOO WHERE BAR ='BBB'",Long.class));
            }
    
            //结果 0
    
            try{
                fooService.invokeInsertThenRollback();
            }catch(Exception e){
                log.info("BBB {}",jdbcTemplate.queryForObject("SELECT COUNT(*) FROM FOO WHERE BAR ='BBB'",Long.class));
            }
    
            //结果 1   spring 事务是通过穿建 代理对象来添加事务 这个是内部调用 调用方法  所以在调用的时候不会增强事务
            //要想它加上事务
    
    
        }
        
    }
  • 相关阅读:
    简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器
    Windows客户端 Linux服务器通讯 字符编码问题
    C++时间标准库时间time和系统时间的使用
    Window7系统安装Ubuntu16双系统
    Window7 系统下重新建立一个新分区
    UltraISO(软碟通) 制作U盘启动盘
    Python 列表反转显示方法
    HTML,CSS,JS个别知识点总结
    Git 创建版本库并实现本地上传数据到GitHub库
    Python爬虫数据保存到MongoDB中
  • 原文地址:https://www.cnblogs.com/panda777/p/11129259.html
Copyright © 2011-2022 走看看