您的位置:首页 > 编程语言 > Java开发

简单快速的用SpringBoot集成多数据源(mybatis)

2018-02-25 17:13 615 查看
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容器中
@
d014
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

效果如图:



这就完事了,应该很简单的,请路过的大神多多指导,如果此文帮到您了,请帮我点个赞,谢谢各位大神。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: