因为业务需求,需要在原先的项目基础上引入另一个项目的数据。
首先看一下整体的包结构:
。
然后是这边持久层的一个结构,我这边是做的是2个数据源,多数据源原理类似。做双数据源需要将两个不同的数据源的***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属性进行排除。
详细请看://www.greatytc.com/p/5cb57be5d0ea
@SpringBootApplication
@SpringBootApplication是一个组合注解,用于快捷配置启动类。
详细请看:https://www.cnblogs.com/east7/p/10426832.html
@MapperScan
指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加
详细请看:https://blog.csdn.net/manchengpiaoxue/article/details/84937257
其他注解对配置多数据源不怎么影响。
下面是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(); }//如果有更多的数据源需要,在此添加相关的bean,注意bean属性name,@ConfigurationProperties为配置文件配置数据源的前缀 //有一个bean就要对于在config文件夹创建对应的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