springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架

最近在使用springcloud Finchley.SR2 + springcloud alibaba 0.2.1.RELEASE + springboot 2.0.6.RELEASE+Nacos 1.3.1+Seata 0.9.0+Mybatis+Redis开发时,seata做全局分布式事务控制时一直报错.工程依赖jar包管理,
源码地址https://gitee.com/wuhan1/spring-cloud-alibaba-shop


    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.SR2
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.2.1.RELEASE
                pom
                import
            

            
                org.springframework.boot
                spring-boot-dependencies
                2.0.6.RELEASE
                pom
                import
            

            
            
                mysql
                mysql-connector-java
                5.1.46
            

            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                1.3.0
            

            
            
                com.alibaba
                druid
                1.1.9
            

            
                org.redisson
                redisson
                3.5.0
            

        
        
            com.alibaba.cloud
            spring-cloud-alibaba-seata
            2.1.0.RELEASE
            
                
                    seata-all
                    io.seata
                
            
        
        
            io.seata
            seata-all
            0.9.0
        

        
    


springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第1张图片

 业务逻辑执行的时候报下面的错,找不到服务
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第2张图片

springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第3张图片
主要是配置没配好,0.9.0版本的seata跟1.0以后的使用差别还是有点大,详细配置如下
1.下载seata0.9.0,地址:http://seata.io/zh-cn/blog/download.html
2.进入conf目录下,创建seatas数据库,执行脚本和修改file.conf、registry.conf、nacos-config.txt三个文件,

springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第4张图片

创建seata数据库,执行脚本db_store.sql、,对应的业务表下都需要执行db_undo_log.sql,

file.conf修改的地方,使用的db方式存储数据,所以后面的要配置数据库的连接
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第5张图片
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第6张图片

registry.conf修改,注册中心改成nacos


修改nacos-config.txt文件,配置seata的事务组名称等信息
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第7张图片

3.比较重要的一点,需要把seata的配置信息注册到nacos上,在conf目录下执行命令 sh nacos-config.sh localhost
在nacos那边也可以看到,

springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第8张图片
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第9张图片
4.需要把file.conf和registry.conf文件复制到工程的resources下面,并且在application.yml中配置seata的事务组名称。
springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第10张图片springcloud+springcloud alibaba+springboot+Nacos+Seata+Mybatis+Redis开发框架_第11张图片

还有很重要的一点,在启动类中加入以下代码 ,否则会发现失败了事务却没有回滚,主要是 配置seata 数据源,数据源采用 druid 的DruidDataSource,但实际 jdbcTemplate 执行时并不是用该数据源,而用的是 seata 对DruidDataSource的代理DataSourceProxy,所以,与 RM 相关的代码逻辑基本上都是从DataSourceProxy这个代理数据源开始的。

    @Bean
	@ConfigurationProperties(prefix = "spring.datasource")
	public DruidDataSource druidDataSource() {
		return new DruidDataSource();
	}

    /**
     * 需要将 DataSourceProxy 设置为主数据源,否则事务无法回滚
     */
    @Primary
	@Bean("dataSource")
	public DataSource dataSource(DruidDataSource druidDataSource) {
		return new DataSourceProxy(druidDataSource);
	}


重新启动工程就OK了

你可能感兴趣的:(笔记,java,seata)