当前使用版本(必须填写清楚,否则不予处理)

3.1.0

该问题是怎么引起的?(最新版上已修复的会直接close掉)

集成seata分布式事务 增加数据源配置信息:

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
    return new DruidDataSource();
}
@Bean
public DataSourceProxy dataSourceProxy(DataSource dataSource) {
    return new DataSourceProxy(dataSource);
}

@Bean
@ConfigurationProperties(prefix = "mybatis")
public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) {
    // 这里用 MybatisSqlSessionFactoryBean 代替了 SqlSessionFactoryBean,否则 MyBatisPlus 不会生效
    MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    mybatisSqlSessionFactoryBean.setDataSource(dataSourceProxy);
    return mybatisSqlSessionFactoryBean;
}

此配置可以生效分布式事务,MP的save和分页都能正常运行。 seata官方博客有解释,mp最终通过MybatisPlusAutoConfiguration的SqlSessionFactory设置增加功能,方法中使用factory.setDataSource(dataSource)设置数据源,但是上述我的配置并没有设置DataSource数据源而分布式事务和mp的新增和分页都能正常使用,这一点有疑问,调试过程中加入此配置后测试到MybatisPlusAutoConfiguration的SqlSessionFactory并没有被触发,这是否会导致mp增强功能失效,如果失效为什么分页和mp的新增还能够正常使用

重现步骤

参考官方demo: 官方demo地址 springcloud+mp项目起2个服务加入我上述的配置做两个服务的事务数据库关联操作即可复现

报错信息

mp的字段填充功能失效,无法触发新增或修改的字段自动填充

Comment From: miemieYaho

你自己构建就自己把MetaObjectHandler set到GlobalConfig 里面去