package com.jyxt.thridparty.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; 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.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan( // 扫描PostgreSQL的Mapper接口 basePackages = "com.jyxt.thridparty.dao.pg", // 使用PostgreSQL的SqlSessionFactory sqlSessionFactoryRef = "pgSqlSessionFactory" ) public class PostgresqlDataSourceConfig { // PostgreSQL 数据源 @Bean(name = "pgDataSource") @ConfigurationProperties(prefix = "spring.datasource.pg") public DataSource pgDataSource() { return DataSourceBuilder.create().build(); } // PostgreSQL 事务管理器 @Bean(name = "pgTransactionManager") public DataSourceTransactionManager pgTransactionManager( @Qualifier("pgDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } // PostgreSQL 分页插件 @Bean(name = "pgMybatisPlusInterceptor") public MybatisPlusInterceptor pgMybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 配置PostgreSQL分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL)); return interceptor; } // PostgreSQL SqlSessionFactory @Bean(name = "pgSqlSessionFactory") public SqlSessionFactory pgSqlSessionFactory( @Qualifier("pgDataSource") DataSource dataSource, @Qualifier("pgMybatisPlusInterceptor") MybatisPlusInterceptor interceptor) throws Exception { MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations( new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/pg/*.xml") // 指定PostgreSQL的Mapper XML文件位置 ); // 设置分页插件 sessionFactory.setPlugins(interceptor); return sessionFactory.getObject(); } }