• spring5之关于事务的操作


    关于事务是什么学了数据库的都应该知道,在spring中如何完成事务的操作有两种方式,1是xml配置,2是注解开发,xml配置的我就不粘代码了,直接注解

    1.首先创建配置类

    @Configuration
    //你要扫描的项目包名
    @ComponentScan(basePackages = "spring5")
    //开启事务的注解
    @EnableTransactionManagement
    public class Config {
        //创建数据库的链接池
        @Bean
        public DruidDataSource getDruidDataSource(){
            DruidDataSource dataSource=new DruidDataSource();
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("url");
            dataSource.setUsername("root");
            dataSource.setPassword("passowrd");
            return dataSource;
        }
    
        //链接对象
        @Bean
        public JdbcTemplate getjdbcTemplate(DruidDataSource dataSource){
            JdbcTemplate jdbcTemplate=new JdbcTemplate();
            jdbcTemplate.setDataSource(dataSource);
            return jdbcTemplate;
        }
        //事务管理器
        @Bean
        public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource dataSource){
            DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();
            transactionManager.setDataSource(dataSource);
            return transactionManager;
        }
    
    }
    View Code

    2.Dao层

    @Repository
    public class Userdaoimpl implements Userdao{
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void addmoney() {
            String sql="update t_acount set money=money-? where username=?";
            jdbcTemplate.update(sql,50,"chenghaixiang");
        }
    
        @Override
        public void reducemoney() {
            String sql="update t_acount set money=money+? where username=?";
            jdbcTemplate.update(sql,50,"wang");
    
        }
    }
    View Code

    3.service层

    @Service
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)
    public class UserService {
        @Autowired
        private Userdao userdao;
    
        public void zhuanzhang(){
    
                userdao.addmoney();
                //异常
                //用来测试事务的
                int i=10/0;
                userdao.reducemoney();
    
        }
    }
    View Code

    4.测试

    @Test
        public void test3(){
            ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
            UserService userService=context.getBean("userService",UserService.class);
            userService.zhuanzhang();
        }
    View Code

    测试结果应该是加了int i=10/0 。对数据库操作不成功

    在service层中@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)这个注解是对事务操作的一些配置

    如ioslation:事务隔离级别,propagation:事务传播行为等等

  • 相关阅读:
    亿级 Web 系统的容错性建设实践
    Spring 4支持的Java 8新特性一览
    Java多线程干货系列—(一)Java多线程基础
    Sublime Text 2 实用快捷键(Mac OS X)
    spring-事务管理
    100 个 Linux 常用命令大全
    这些年MAC下我常用的那些快捷键
    Java 容器源码分析之HashMap多线程并发问题分析
    MySQL索引结构--由 B-/B+树看
    Java 容器之 Connection栈队列及一些常用
  • 原文地址:https://www.cnblogs.com/chenghaixiang/p/16200774.html
Copyright © 2020-2023  润新知