SpringBoot整合Mybatis-Plus+Druid多数据源配置

1、添加必要的依赖

        <!--数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--Mybatis-Plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
        <!-- 多数据源配置dynamic-datasource-spring-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.2.1</version>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

2、 书写配置文件。默认配置文件只有application.yml文件,但是为了多数据源配置这里新增application-dev.yml配置文件

配置文件appliction.yml。里面对application-dev.yml文件进行了引用,对项目名称、端口以及druid进行了相关配置

server:
  port: 8080
spring:
  profiles:
    active: dev
  application: excel
  autoconfigure: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 10 #初始化时建立物理连接的个数
      min-idle: 10 #最小连接池数量
      maxActive: 100 #最大连接池数量
      maxWait: 20000 #获取连接时最大等待时间,单位毫秒
      #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      time-between-eviction-runs-millis: 20000 #既作为检测的间隔时间又作为test-while-idle执行的依据
      min-evictable-idle-time-millis: 30000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
      #用来检测连接是否有效的sql
      #mysql中为 select 'x'
      #oracle中为 select 1 from dual
      validation-query: SELECT 'x'
      test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      exception-sorter: true #当数据库抛出不可恢复的异常时,抛弃该连接
      pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
      max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true
      #通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
      #filters通过别名的方式配置扩展插件,常用的插件有:
      #监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
      filters: stat,wall,log4j
      #设置访问druid监控页面的拦截路径及账号和密码,默认没有
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin

3、application-dev.yml配置文件。主要配置多数据源信息和mybatis-plus的日志打印

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则在未匹配到指定数据源时候使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/bootplus?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
          username: root
          password: zhangpei@123
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave:
          url: jdbc:mysql://localhost:3306/exceltest?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
          username: root
          password: zhangpei@123
          driver-class-name: com.mysql.cj.jdbc.Driver
# 配置sql打印日志,开发环境需要,生产环境一般不需要
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4、在启动类中的@SpringBootApplication中配置exclude,如下所示

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@MapperScan("com.example.poi.excel.mapper")
public class ExcelApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExcelApplication.class, args);
    }

}

5、多数据源使用。

        使用@DS切换数据源。@DS可以注解在方法上,也可以注解在类上。@DS注解存在就近原则,方法上注解优先于类上注解。如果没有@DS,则使用默认数据源。如下列

@Service
@DS("slave")
public class UserServiceImpl implements UserService {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public List selectAll() {
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave_1")
  public List selectByCondition() {
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}

猜你喜欢

转载自blog.csdn.net/qq_40386113/article/details/115231323