2025.2.28Bug

Bug1(已解决)

起始:启动服务时不能与seata-server建立连接,发现是application.yml的seata事物组tx_service_group配置错误(与seata-server的file.conf的tx_service_group不一致)
解决方法:改成一样就好了

cloud:
alibaba:
seata:
#指定事务组名称 , 与seata-server对应/conf/file.conf
tx-service-group: cbh_order_tx_group
nacos:
discovery:
server-addr: localhost:8848
service {
#vgroup->rgroup
vgroup_mapping.cbh_order_tx_group = "default"
#only support single node
default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
#unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent
max.commit.retry.timeout = "-1"
max.rollback.retry.timeout = "-1"
}

Bug2(已解决)

起始:使用@GlobalTransactional做全局事务控制的时候发现seata的日志虽然显示全局事务被回滚(rollback status:Rollbacked) ,但是数据库的数据仍然被修改了,找了老半天结果发现是seata代理数据源的配置类忘记加上@Configuration注解了,配置没有生效,而且注入mapperLocations的注解还写错了,导致启动一直失败。。。。

解决方法:给seata代理数据源的配置类加上@Configuration注解和修改注入mapperLocations的注解

@Configuration
public class DataSourceProxyConfig {
@Value("${mybatis.mapper-locations}")
private String mapperLocation;
//配置durid数据池
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDatasource(){
return new DruidDataSource();
}
//配置datasourceproxy使用seata代理数据源
@Bean
public DataSourceProxy dataSourceProxy(DataSource dataSource){
return new DataSourceProxy(dataSource);
}
//配置sqlsessionfactory
@Bean
public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocation));
sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
return sqlSessionFactoryBean.getObject();
}
}