SpringBoot默认支持单个DataSource,现在很多项目也不再采用单个数据库进行操作,所以学会配置多个DataSource是很有必要的

1.在启动类@SpringBootApplication中设置排除掉DataSourceAutoConfiguration.class,因为springboot项目会自动加载,代码如下

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class CollegeApplication {

    public static void main(String[] args) {
        SpringApplication.run(CollegeApplication.class, args);
    }

}

2.配置yml文件,我拿其中的一个举例datasource-college

server:
  port: 8081
spring:
  datasource-college:
    url: jdbc:mysql://127.0.0.1:3306/college?characterEncoding=utf-8
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
  datasource-blogs:
    url: jdbc:mysql://127.0.0.1:3306/blogs?characterEncoding=utf-8
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root

3.DataSource配置类,配置一个DataSource就重新创建一个配置类

(可以直接cv,注意改路径名,还有name属性,防止name一致)

@Configuration
//basePackages 指定dao包  sqlSessionFactoryRef 要和SqlSessionFactory定义的Bean名称一样
@MapperScan(basePackages = { "org.dingxf.dao1" }, sqlSessionFactoryRef = "collegeSqlSessionFactory")
public class SqlSessionFactoryCollegeConfig {

    //mapper扫描xml文件的路径
    static final String MAPPER_LOCATION = "org/dingxf/mapper1/*.xml";

    /**
     * 配置数据源
     */
    @Bean(name = "dataSourceCollege")
    //prefix的值要和yml文件中的一致
    @ConfigurationProperties(prefix = "spring.datasource-college")
    public DataSource dataSourceCollege(){
        return DataSourceBuilder.create().build();
    }

    /**
     * 配置SqlSessionFactory
     */
    @Bean(name = "collegeSqlSessionFactory")
    public SqlSessionFactory collegeSqlSessionFactory(@Qualifier("dataSourceCollege") DataSource dataSource) throws Exception{
        //final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        //用这个MybatisSqlSessionFactoryBean是因为我用的是mybatis普拉斯 用上面的会报错
        final MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //这里注意getResources()方法,一定要加s因为有一个方法是getResource()
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        return sqlSessionFactoryBean.getObject();
    }
}

这样就配置完成了!

测试结果

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐