package cn.huge.module.config; // import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider; // import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; // import org.apache.ibatis.session.SqlSessionFactory; // import org.mybatis.spring.SqlSessionFactoryBean; // import org.mybatis.spring.SqlSessionTemplate; // import org.springframework.beans.factory.annotation.Autowired; // import org.springframework.beans.factory.annotation.Qualifier; // import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; // import org.springframework.boot.context.properties.ConfigurationProperties; // import org.springframework.boot.jdbc.DataSourceBuilder; // import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; // import org.springframework.context.annotation.Primary; // import org.springframework.core.io.support.PathMatchingResourcePatternResolver; // import org.springframework.jdbc.datasource.DataSourceTransactionManager; // import org.springframework.transaction.PlatformTransactionManager; // import org.springframework.web.context.WebApplicationContext; // // import javax.sql.DataSource; @Configuration public class MasterDataSourceConfig { // /** // * 创建主数据源 // * // * 该方法通过DataSourceBuilder创建一个数据源实例,并将其配置为主数据源 // * 主数据源的配置属性通过前缀"spring.datasource.dynamic.datasource.master"进行绑定 // * // * @return DataSource 主数据源实例 // */ // @Primary // 表示默认数据源 // @Bean("masterDataSource") // @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master") // public DataSource createMasterDataSource(){ // return DataSourceBuilder.create().build(); // } // // /** // * 创建主数据库连接的SqlSessionFactory // * 该方法配置了MyBatis的SqlSessionFactory,用于管理主数据源的数据库会话 // * // * @param dataSource 主数据源,标记为@Qualifier("masterDataSource")以区分其他数据源 // * @return SqlSessionFactory实例,用于生成SqlSession以与主数据库交互 // * @throws Exception 如果工厂 bean 初始化失败,则抛出异常 // * // * 注意:这里使用了@Primary注解,表示当多个同类Bean存在时,优先使用该Bean // * 这是因为在大多数情况下,主数据库是默认的、优先的数据库连接 // */ // @Primary // @Bean("masterSqlSessionFactory") // public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { // // SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); // // 使用自定义的MybatisSqlSessionFactoryBean来构建SqlSessionFactory // MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean(); // // 设置数据源为传入的主数据源 // bean.setDataSource(dataSource); // // mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致) // // 配置MyBatis映射文件的位置,确保MyBatis能找到映射文件 // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/xml/*.xml")); // // 返回构建好的SqlSessionFactory对象 // return bean.getObject(); // } // // /** // * 配置事务管理器 // * // * 该方法配置并返回一个DataSourceTransactionManager实例,用于管理数据源的事务 // * 主要通过注入主数据源(masterDataSource)来实现事务管理 // * // * @param dataSource 主数据源,通过Qualifier注解指定数据源为masterDataSource // * @return DataSourceTransactionManager实例,用于管理事务 // */ // @Primary // @Bean(name = "masterTransactionManager") // public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) { // // 创建DataSourceTransactionManager实例并设置数据源 // DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource); // // // 设置在提交事务失败时自动回滚 // dataSourceTransactionManager.setRollbackOnCommitFailure(true); // // // 设置在事务参与者失败时全局回滚 // dataSourceTransactionManager.setGlobalRollbackOnParticipationFailure(true); // // // 返回配置好的DataSourceTransactionManager实例 // return dataSourceTransactionManager; // } // // /** // * 创建并配置主数据库的SqlSessionTemplate // * // * @param sqlSessionFactory 主数据库的SqlSessionFactory // * @return 主数据库的SqlSessionTemplate实例 // */ // @Primary // @Bean("masterSqlSessionTemplate") // public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory){ // return new SqlSessionTemplate(sqlSessionFactory); // } }