项目中使用mybatisplus作为ORM框架,如果需要使用多个数据源,可以按如下方法配置:
一、POM文件引入mybatis plus和mysql相关依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
二、配置文件
spring: datasource: type: com.zaxxer.hikari.HikariDataSource dynamic: datasource: databasefirst: # 数据源1名称 url: jdbc:mysql://数据库IP:端口/数据库名称?useSSL=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&serverTimezone=GMT%2B8 username: 用户名 password: 密码 driver-class-name: com.mysql.cj.jdbc.Driver databasesecond: # 数据源2名称 url: jdbc:mysql://数据库IP:端口/数据库名称?useSSL=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&serverTimezone=GMT%2B8 username: 用户名 password: 密码 driver-class-name: com.mysql.cj.jdbc.Driver primary: databasefirst #默认首选数据源
上述配置文件中指定了两个数据源,名称分别为databasefirst和databasesecond,这两个名字自己定义即可,在后面的数据源注解中会用到。
三、编写service类,测试多数据源:
@Service @DS("databasefirst") public class DemoMultiDataSourceService { @Autowired private JdbcTemplate jdbcTemplate; public List noDSAnnotationMethodQuery(){ return jdbcTemplate.queryForList("select * from table_in_firstdb limit 5"); } @DS("databasesecond") public List querySecondDB(){ return jdbcTemplate.queryForList("select * from table_in_seconddb limit 5"); } @DS("databasefirst") public List queryFirstDB(){ return jdbcTemplate.queryForList("select * from table_in_firstdb limit 5"); } }
@DS注解可以用在方法上,也可以用在类级别。用于方法上的DS注解会覆盖类级别的DS注解,类级别的DS注解指定了类中的方法使用的数据源,方法上的DS注解指定该方法需要用到的数据源。
在实际开发过程中,按照原有的方式编写mapper接口,并将接口注入到service实现类中即可,在service实现类上使用DS注解(或者service方法上使用DS注解)即可指定数据源。
关于dynamic-datasource的更多使用方法,可以查阅mybatis plus官网。