佛山市多语言营销型网站建站,logo设计网站免费无水印,简单的网站建设公司的模板,微网站开发平台概述
配置多数据源有两种方案。一种是使用dynamic依赖的DS注解的方法#xff0c;这种是比较简单方便的方法。另一种是本文介绍的方式#xff0c;配置不同数据源的SqlSessionFactory 。 第二种方法是我在开发一个老项目时#xff0c;老项目配置的方法。
application.xml
s…概述
配置多数据源有两种方案。一种是使用dynamic依赖的DS注解的方法这种是比较简单方便的方法。另一种是本文介绍的方式配置不同数据源的SqlSessionFactory 。 第二种方法是我在开发一个老项目时老项目配置的方法。
application.xml
server:port: 8002spring:datasource:master:jdbc-url: xxxusername: usernamepassword: passworddriver-class-name: driver-class-nameslave:jdbc-url: xxxusername: usernamepassword: passworddriver-class-name: driver-class-name初始化多数据源
package com.zou.myproject.config;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 javax.sql.DataSource;Configuration
public class DatasourceConfig {PrimaryBean(masterDatasource)ConfigurationProperties(prefix spring.datasource.master)public DataSource masterDatasource(){return DataSourceBuilder.create().build();}Bean(slaveDatasource)ConfigurationProperties(prefix spring.datasource.slave)public DataSource slaveDatasource(){return DataSourceBuilder.create().build();}}
主数据源配置
package com.zou.myproject.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;Configuration
MapperScan(basePackages com.zou.myproject.mapper,sqlSessionFactoryRef sqlSessionFactoryMaster,sqlSessionTemplateRef sqlSessionTemplateMaster
)
public class MasterDatasourceConfig {private DataSource masterDatasource;public MasterDatasourceConfig(Qualifier(masterDatasource) DataSource masterDatasource){this.masterDatasource masterDatasource;}Bean(sqlSessionFactoryMaster)Primarypublic SqlSessionFactory sqlSessionFactoryMaster() throws Exception{MybatisSqlSessionFactoryBean bean new MybatisSqlSessionFactoryBean();bean.setDataSource(masterDatasource);PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();bean.setMapperLocations(resolver.getResources(classpath*:/mapper/*.xml));return bean.getObject();}Bean(sqlSessionTemplateMaster)Primarypublic SqlSessionTemplate sqlSessionTemplateMaster() throws Exception{return new SqlSessionTemplate(sqlSessionFactoryMaster());}
}
次数据源
package com.zou.myproject.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;Configuration
MapperScan(basePackages com.zou.myproject.mapper2,sqlSessionFactoryRef sqlSessionFactorySlave,sqlSessionTemplateRef sqlSessionTemplateSlave
)
public class SlaveDatasourceConfig {private DataSource slaveDatasource;public SlaveDatasourceConfig(Qualifier(slaveDatasource) DataSource slaveDatasource){this.slaveDatasource slaveDatasource;}Bean(sqlSessionFactorySlave)public SqlSessionFactory sqlSessionFactorySlave() throws Exception{MybatisSqlSessionFactoryBean bean new MybatisSqlSessionFactoryBean();bean.setDataSource(slaveDatasource);PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();bean.setMapperLocations(resolver.getResources(classpath*:/mapper2/*.xml));return bean.getObject();}Bean(sqlSessionTemplateSlave)public SqlSessionTemplate sqlSessionTemplateSlave() throws Exception{return new SqlSessionTemplate(sqlSessionFactorySlave());}
}
测试
我这里就不贴代码了。思路就是创建单元测试新建两个mapper不同mapper对应不同数据源。最后我自己的测试方法是可行的。
启动类取消mybatisplus的自动装配
如果上面配置完启动后使用mybatisplus封装的方法报了Invalid bound statement的错误就把MybatisAutoConfiguration.class从启动类中排除掉。
package com.zou.myproject;import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication(exclude MybatisAutoConfiguration.class)
public class MyProjectApplication {public static void main(String[] args) {SpringApplication.run(MyProjectApplication.class, args);}}
总结
springboot mybatis mybatisplus多数据源配置事务这块内容开发的时候都是一直查一直试错才找到解决方案的有时间得看源码才能理清楚。