springboot多数据源下,配置PageHelp方言
1.先在application.yml文件的数据源配置中多加个数据源配置:dialect
spring: datasource: primary: url: jdbc:mysql://localhost:3306/mydb driver - class - name: com.mysql.cj.jdbc.Driver dialect - type: mysql secondary: url: jdbc:oracle://localhost:1521/orcl driver - class - name: oracle.jdbc.driver.OracleDriver dialect - type: oracle
2. 新建一个PageHelperConfig类,在这个配置类中,定义了两个Bean(pageHelperPrimary和pageHelperSecondary)分别用于配置主数据源和次数据源对应的 PageHelper 拦截器。
通过getDialect方法来获取每个数据源的方言类型,并将其设置到 PageHelper 的Properties中,这样 PageHelper 就可以根据不同的方言类型来生成正确的分页 SQL 语句。
import com.github.pagehelper.PageInterceptor; import org.apache.ibatis.plugin.Interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.Properties; @Configuration public class PageHelperConfig { @Autowired private DataSource primaryDataSource; @Autowired private DataSource secondaryDataSource; @Bean public Interceptor pageHelperPrimary() { PageInterceptor pageInterceptor = new PageInterceptor(); Properties properties = new Properties(); String dialect = getDialect(primaryDataSource); properties.setProperty("dialect", dialect); // 可以设置其他PageHelper相关的参数 pageInterceptor.setProperties(properties); return pageInterceptor; } @Bean public Interceptor pageHelperSecondary() { PageInterceptor pageInterceptor = new PageInterceptor(); Properties properties = new Properties(); String dialect = getDialect(secondaryDataSource); properties.setProperty("dialect", dialect); // 可以设置其他PageHelper相关的参数 pageInterceptor.setProperties(properties); return pageInterceptor; } private String getDialect(DataSource dataSource) { try { // 根据数据源的连接信息或者配置属性来确定方言类型 String dialectType = null; if (dataSource instanceof org.springframework.boot.jdbc.DataSourceBuilder.Metadata dataSourceMetadata) { dialectType = dataSourceMetadata.getDriverClassName(); if (dialectType.contains("mysql")) { return "mysql"; } else if (dialectType.contains("oracle")) { return "oracle"; } } } catch (Exception e) { e.printStackTrace(); } return "mysql"; // 默认返回mysql方言 } }