SpringBoot集成多数据源就是一个项目里有多个数据库:效果如图:
第一步:在application.properties中添加如下代码:
#这里写代码片#表示操作test001的数据库
spring.datasource.test001.url=jdbc:mysql://localhost:3306/test001?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
spring.datasource.test001.username=root
spring.datasource.test001.password=root
spring.datasource.test001.driverClassName=com.mysql.jdbc.Driver
#表示操作test002的数据库
spring.datasource.test002.url=jdbc:mysql://localhost:3306/test002?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
spring.datasource.test002.username=root
spring.datasource.test002.password=root
spring.datasource.test002.driverClassName=com.mysql.jdbc.Driver
第二步,在创建datasource.DataSourceConfig001和datasource.DatasourcConfig002,结构如图:
datasource.DataSourceConfig001,代码如下:
package com.demo.datasource;
import com.sun.tracing.ProbeName;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
import javax.xml.crypto.Data;
@Configuration //将其注入到SpringBoot容器中
@MapperScan(basePackages = "com.demo.test001",sqlSessionFactoryRef = "test001SqlSessionFactory")
public class DataSourceConfig001 {
/**
* 配置test001 数据库
*/
@Bean(name = "test001DataSource")
@Primary //默认执行test001数据库(必须只能添加在一个数据库连接名上,不然会报错)
@ConfigurationProperties(prefix = "spring.datasource.test001")
public DataSource test001DataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置test001 sql会话工厂
*/
@Bean(name = "test001SqlSessionFactory")
@Primary
public SqlSessionFactory test001SqlSessionFactory(@Qualifier("test001DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//配置mapper.xml文件访问路径
bean.setMapperLocations(new
PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
//返回
return bean.getObject();
}
/**
*
* 配置test001 事物管理
*/
@Bean(name = "test001TransactionManager")
public DataSourceTransactionManager test001TransactionManager(@Qualifier("test001DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean()
public SqlSessionTemplate test001(@Qualifier("test001SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
datasource.DataSourceConfig002,代码如下:
package com.demo.datasource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration //将其注入到SpringBoot容器中
@MapperScan(basePackages = "com.demo.test002",sqlSessionFactoryRef = "test002SqlSessionFactory")
public class DataSourceConfig002 {
/**
* 配置test002 数据库
*/
@Bean(name = "test002DataSource"
@ConfigurationProperties(prefix = "spring.datasource.test002")
public DataSource test002DataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置test002 sql会话工厂
*/
@Bean(name = "test002SqlSessionFactory")
public SqlSessionFactory test002SqlSessionFactory(@Qualifier("test002DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//配置mapper.xml文件访问路径
bean.setMapperLocations(new
PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
//返回
return bean.getObject();
}
/**
*
* 配置test002 事物管理
*/
@Bean(name = "test002TransactionManager")
public DataSourceTransactionManager test002TransactionManager(@Qualifier("test002DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean()
public SqlSessionTemplate test002(@Qualifier("test002SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
这是最核心的部分,已经完事了;
第三步,test001.test001Dao和test002.test002Dao代码分别如下:
test001.test001Dao:
package com.demo.test001;
import com.demo.entity.Student;
public interface test001Dao {
//测试
int insert(Student student);
}
mapper.test001.xml 代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--这个文件路径就是你加@Mapper的类-->
<mapper namespace="com.demo.test001.test001Dao">
<insert id="insert" parameterType="com.demo.entity.Student">
INSERT INTO test001.student(
id,
name,
age
)VALUES (
#{id},
#{name},
#{age}
)
</insert>
</mapper>
test002.test002Dao
package com.demo.test002;
import com.demo.entity.Student;
public interface test002Dao {
//测试
int insert(Student student);
}
mapper.test002.xml 代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--这个文件路径就是你加@Mapper的类-->
<mapper namespace="com.demo.test002.test002Dao">
<insert id="insert" parameterType="com.demo.entity.Student">
INSERT INTO test002.student(
id,
name,
age
)VALUES (
#{id},
#{name},
#{age}
)
</insert>
</mapper>
第四步,写个controller测试一下(这里我省掉了service)
package com.demo.controller.impl;
import com.demo.entity.Student;
import com.demo.test001.test001Dao;
import com.demo.test002.test002Dao;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class DemoControllerImpl {
@Resource
private test001Dao test001Dao;
@Resource
private test002Dao test002Dao;
@RequestMapping("/test001")
public String test001() {
Student student = new Student();
student.setId(1);
student.setName("zhangsan");
student.setAge(12);
int row = test001Dao.insert(student);
return "test001";
}
@RequestMapping("/test002")
public String test002() {
Student student = new Student();
student.setId(1);
student.setName("lisi");
student.setAge(12);
int row = test002Dao.insert(student);
return "test002";
}
}
启动项目,运行一下我的
URL1:localhost:8080/test001,
URL2:localhost:8080/test002
效果如图:
这就完事了,应该很简单的,请路过的大神多多指导,如果此文帮到您了,请帮我点个赞,谢谢各位大神。。。。。。