【SpringBoot】springboot整合多数据拆分思路 及 使用分包方式拆分数据源
程序员文章站
2024-03-22 19:18:16
...
一、springboot整合多数据拆分思路
1、多数据源:就是一个项目中使用多个jdbc连接不同的数据库;
例举:一个公司有两个数据库,一个是专门存放共同配置文件的数据库,一个是数据库垂直业务数据库。(垂直:根据业务划分具体数据库)
2、在一个项目中如何划分多数据源:分包名(业务)划分,或者通过注解方式划分
其实也就是怎么区别这个方法或者这个类具体用的哪个数据库
二、使用分包方式拆分数据源
1、遇到一些小麻烦:首先配置文件里url要改成jdbc-url
2、项目结构
3、application.properties文件配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
###datasource1
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.username=root
spring.datasource.test1.password=root
###datasource1
spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.username=root
spring.datasource.test2.password=root
4、datasourceconfig文件内容
package com.ssrtest04.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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration//注册到springboot容器中
@MapperScan(basePackages="com.ssrtest04.test01",sqlSessionFactoryRef="test1SqlSessionFactory")
public class DataSource1Config{
/**
*@methodDesc:功能描述:(配置test1数据库)
*/
@Bean(name="test1DataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.test1")
public DataSourcetest DataSource(){
return DataSourceBuilder.create().build();
}
/**
*
*@methodDesc:功能描述:(test1sql会话工厂)
*/
@Bean(name="test1SqlSessionFactory")
public SqlSessionFactorytest SqlSessionFactory(@Qualifier("test1DataSource")DataSource dataSource)
throwsException{
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//bean.setMapperLocations(
//newPathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
return bean.getObject();
}
/**
*
*@methodDesc:功能描述:(test1事物管理)
*/
@Bean(name="test1TransactionManager")
public DataSourceTransactionManagertest TransactionManager(@Qualifier("test1DataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="test1SqlSessionTemplate")
public SqlSessionTemplatetest SqlSessionTemplate(
@Qualifier("test1SqlSessionFactory")SqlSessionFactory sqlSessionFactory)throwsException{
return new SqlSessionTemplate(sqlSessionFactory);
}
}