您好,欢迎访问一九零五行业门户网

Springboot怎么集成mybatis实现多数据源配置

新建springboot工程,引入web、mysql、mybatis依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.mybatis.spring.boot</groupid> <artifactid>mybatis-spring-boot-starter</artifactid> <version>2.2.2</version> </dependency> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <scope>runtime</scope> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency>
在application.properties中配置多数据源
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/ds0
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.driver
spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/ds1
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.driver
多数据源配置与单个数据源配置不同点在于,spring.datasource之后多了一个数据源名称primary/secondary用来区分不同的数据源;
初始化数据源
新建一个配置类,用来加载多个数据源完成初始化。
@configurationpublic class datasourceconfiguration { @primary @bean @configurationproperties(prefix = "spring.datasource.primary") public datasource primarydatasource() { return datasourcebuilder.create().build(); } @bean @configurationproperties(prefix = "spring.datasource.secondary") public datasource secondarydatasource() { return datasourcebuilder.create().build(); }}
通过@configurationproperties就可以知道这两个数据源分别加载了spring.datasource.primary.*和spring.datasource.secondary.*的配置。若没有明确指定数据源,则使用被@primary注解所标注的主数据源。
mybatis配置
@configuration@mapperscan( basepackages = "com*.primary", sqlsessionfactoryref = "sqlsessionfactoryprimary", sqlsessiontemplateref = "sqlsessiontemplateprimary")public class primaryconfig { private datasource primarydatasource; public primaryconfig(@qualifier("primarydatasource") datasource primarydatasource) { this.primarydatasource = primarydatasource; } @bean public sqlsessionfactory sqlsessionfactoryprimary() throws exception { sqlsessionfactorybean bean = new sqlsessionfactorybean(); bean.setdatasource(primarydatasource); return bean.getobject(); } @bean public sqlsessiontemplate sqlsessiontemplateprimary() throws exception { return new sqlsessiontemplate(sqlsessionfactoryprimary()); }}
@configuration@mapperscan( basepackages = "com.*.secondary", sqlsessionfactoryref = "sqlsessionfactorysecondary", sqlsessiontemplateref = "sqlsessiontemplatesecondary")public class secondaryconfig { private datasource secondarydatasource; public secondaryconfig(@qualifier("secondarydatasource") datasource secondarydatasource) { this.secondarydatasource = secondarydatasource; } @bean public sqlsessionfactory sqlsessionfactorysecondary() throws exception { sqlsessionfactorybean bean = new sqlsessionfactorybean(); bean.setdatasource(secondarydatasource); return bean.getobject(); } @bean public sqlsessiontemplate sqlsessiontemplatesecondary() throws exception { return new sqlsessiontemplate(sqlsessionfactorysecondary()); }}
配置类上使用@mapperscan注解来指定当前数据源下定义的实体和mapper的包路径,还注入了sqlsessionfactory和sqlsessiontemplate,通过@qualifier注解指定了对应的数据源,其名字对应在datasourceconfiguration配置类中的数据源定义的函数名。
各个对数据源对应路径下的实体和mapper
@data@noargsconstructorpublic class userprimary { private long id; private string user_name; private integer age; public userprimary(string name, integer age) { this.user_name = name; this.age = age; }}public interface usermapperprimary { @select("select * from user_0 where user_name = #{name}") userprimary findbyname(@param("name") string name); @insert("insert into user_0 (user_name, age) values(#{name}, #{age})") int insert(@param("name") string name, @param("age") integer age); @delete("delete from user_0") int deleteall();}
@data@noargsconstructorpublic class usersecondary { private long id; private string user_name; private integer age; public usersecondary(string name, integer age) { this.user_name = name; this.age = age; }}public interface usermappersecondary { @select("select * from user_1 where user_name = #{name}") usersecondary findbyname(@param("name") string name); @insert("insert into user_1 (user_name, age) values(#{name}, #{age})") int insert(@param("name") string name, @param("age") integer age); @delete("delete from user_1") int deleteall();}
测试
@test public void test() { // 往primary数据源插入一条数据 usermapperprimary.insert("caocao", 20); // 从primary数据源查询刚才插入的数据,配置正确就可以查询到 userprimary userprimary = usermapperprimary.findbyname("caocao"); assert.assertequals(20, userprimary.getage().intvalue()); // 从secondary数据源查询刚才插入的数据,配置正确应该是查询不到的 usersecondary usersecondary = usermappersecondary.findbyname("caocao"); assert.assertnull(usersecondary); // 往secondary数据源插入一条数据 usermappersecondary.insert("sunquan", 21); // 从primary数据源查询刚才插入的数据,配置正确应该是查询不到的 userprimary = usermapperprimary.findbyname("sunquan"); assert.assertnull(userprimary); // 从secondary数据源查询刚才插入的数据,配置正确就可以查询到 usersecondary = usermappersecondary.findbyname("sunquan"); assert.assertequals(21, usersecondary.getage().intvalue()); }
以上就是springboot怎么集成mybatis实现多数据源配置的详细内容。
其它类似信息

推荐信息