首先,在pom文件导入依赖

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
     <version>2.5.4</version>
</dependency>

修改配置文件

 配置文件信息如下

server:
  port: 8087
#  设置tomcat的post请求大小为无限制
  tomcat:
    max-http-form-post-size: -1
spring:
#  设置日期格式
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
#  设置请求大小为无限制
  servlet:
    multipart:
      max-file-size: -1
      max-request-size: -1
  datasource:
    dynamic:
      primary: model
      datasource:
        model:
          url: jdbc:kingbase8:
          driver-class-name: com.kingbase8.Driver
          username: 
          password: 
        plan:
          url: jdbc:kingbase8:
          driver-class-name: com.kingbase8.Driver
          username: 
          password: 
        project:
          url: jdbc:kingbase8:
          driver-class-name: com.kingbase8.Driver
          username: 
          password: 
  jpa:
    open-in-view: false
    #    是否在控制台展示sql
    show-sql: true
    #    如果实体类中添加新字段,或者没有表 创建新的表
    hibernate:
      ddl-auto: none
    properties:
      #     hibernate方言:就是对应数据库,在根据对应的数据库进行自动实现sql
      hibernate.dialect: org.hibernate.dialect.Kingbase8Dialect

mybatis:
  mapper-locations: classpath*:mybatis/*Mapper.xml

##配置分页插件pagehelper
pagehelper:
  #heleperDialect表示配置PageHelper的方言,一般取值为mysql、oracle
  helperDialect: mysql
  #reasonable表示分页合理化参数,其取值默认为false,会直接根据分页参数(PageNum、PageSize)进行查询。当该参数设置为true时,pageNum小于等于0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页
  reasonable: true
  #supportMethodsArguments表示PageHelper是否支持根据mapper方法的入参对象(queryModel)的pageNum、pageSize 来分析是否进行自动分页,默认为false(推荐配置),为true的情况下一不留神会给自己带来坑,除非我们的入参对象(queryModel)中不含这两个字段
  supportMethodsArguments: false
  #为了支持PageHelper的startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
  params: count=countSql

#swagger配置
springfox:
  documentation:
    swagger:
      use-model-v3: false

其中配置了三个数据源,其中选择model作为默认数据源(对应primary配置);

 启动类如下

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan(basePackages = "com.cnooc.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

要在@SpringBootApplication注解中把DataSourceAutoConfiguration.class排除

最后使用@DS

使用@DS在service的实现类上、方法上

使用@DS在mapper的类上、方法上进行使用

其中在类上使用代表,整个实现类的数据源指向某一个,在方法上使用时,代表这个方法的数据源指向某一个

示例:

 遇到问题

配置好之后,进行项目启动时,报了如下错误

 这是因为在pom文件中没有把jdbc或者mybatis的jar包注掉,注掉即可。

补充:

在使用@DS注解时,有如下注意事项:

  1. 不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源;
  2. 第一次加载数据源之后,第二次、第三次…操作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源;
  3. 数据源名称不要包含下划线,否则不能切换。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐