SpringBoot2.1.1多數(shù)據(jù)源/多數(shù)據(jù)庫配置

因為業(yè)務需求,需要在原先的項目基礎上引入另一個項目的數(shù)據(jù)。

首先看一下整體的包結構:

然后是這邊持久層的一個結構,我這邊是做的是2個數(shù)據(jù)源,多數(shù)據(jù)源原理類似。做雙數(shù)據(jù)源需要將兩個不同的數(shù)據(jù)源的***mapper.java、***.xml分開兩個包,包名隨便起,不過要記一下,后面配置文件跟config.java要用

然后看一下程序主入口

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})@SpringBootApplication(scanBasePackages = {"org.linlinjava.litemall"})@MapperScan({"org.linlinjava.litemall.db.dao.druid","org.linlinjava.litemall.db.dao.jdbc"})@EnableTransactionManagement@EnableScheduling

說一下每個注解的用處:

@EnableAutoConfiguration

@EnableAutoConfiguration注解簡化了導入了二方包bean的成本。提供一個二方包給其他應用使用,只需要在二方包里將對外暴露的bean定義在spring.factories中就好了。對于不需要的bean,可以在使用方用@EnableAutoConfiguration的exclude屬性進行排除。

詳細請看:http://www.itdecent.cn/p/5cb57be5d0ea

@SpringBootApplication

@SpringBootApplication是一個組合注解,用于快捷配置啟動類。

詳細請看:https://www.cnblogs.com/east7/p/10426832.html

@MapperScan

指定要變成實現(xiàn)類的接口所在的包,然后包下面的所有接口在編譯之后都會生成相應的實現(xiàn)類

添加位置:是在Springboot啟動類上面添加

詳細請看:https://blog.csdn.net/manchengpiaoxue/article/details/84937257

其他注解對配置多數(shù)據(jù)源不怎么影響。

下面是application-db.yml的配置

然后到了config.java的編寫

package org.linlinjava.litemall.db.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;@Configurationpublic class DataSourceConfig {@Primary? ? @Bean(name ="druid")@ConfigurationProperties(prefix ="spring.datasource.druid")public DataSource dataSourcePreprocess() {return DataSourceBuilder.create().build();? ? }@Primary? ? @Bean(name ="jdbc")@ConfigurationProperties(prefix ="spring.datasource.jdbc")public DataSource dataSourceSentence() {return DataSourceBuilder.create().build();? ? }//如果有更多的數(shù)據(jù)源需要,在此添加相關的bean,注意bean屬性name,@ConfigurationProperties為配置文件配置數(shù)據(jù)源的前綴? ? //有一個bean就要對于在config文件夾創(chuàng)建對應的xxxConfig.java文件生成工廠}

package org.linlinjava.litemall.db.config;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.Autowired;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 = {"org.linlinjava.litemall.db.dao.druid"}, sqlSessionFactoryRef ="sqlSessionFactory1")public class DruidConfig {@Autowired? ? @Qualifier("druid")private DataSourceds1;@Bean(name ="sqlSessionFactory1")@Primary? ? public SqlSessionFactory sqlSessionFactory1()throws Exception {? ? ? ? SqlSessionFactoryBean sqlSessionFactoryBean =new SqlSessionFactoryBean();? ? ? ? sqlSessionFactoryBean.setDataSource(ds1);? ? ? ? sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:org/linlinjava/litemall/db/dao/druid/*.xml"));return sqlSessionFactoryBean.getObject();? ? }@Bean? ? @Primary? ? public SqlSessionTemplate sqlSessionTemplate1()throws Exception {? ? ? ? SqlSessionTemplate sqlSessionTemplate =new SqlSessionTemplate(sqlSessionFactory1());return sqlSessionTemplate;? ? }}

package org.linlinjava.litemall.db.config;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.Autowired;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 = {"org.linlinjava.litemall.db.dao.jdbc"}, sqlSessionFactoryRef ="sqlSessionFactory2")public class JdbcConfig {@Autowired? ? @Qualifier("jdbc")private DataSourceds2;@Bean(name ="sqlSessionFactory2")@Primary? ? public SqlSessionFactory sqlSessionFactory2()throws Exception {? ? ? ? SqlSessionFactoryBean sqlSessionFactoryBean =new SqlSessionFactoryBean();? ? ? ? sqlSessionFactoryBean.setDataSource(ds2);? ? ? ? sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:org/linlinjava/litemall/db/dao/jdbc/*.xml"));return sqlSessionFactoryBean.getObject();? ? }@Bean? ? @Primary? ? public SqlSessionTemplate sqlSessionTemplate2()throws Exception {? ? ? ? SqlSessionTemplate sqlSessionTemplate =new SqlSessionTemplate(sqlSessionFactory2());return sqlSessionTemplate;? ? }}

此處的jdbc,druid都是自定義的,你也可以換成aaa,bbb

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容