SpringBoot配置多个数据库源

2022年6月5日08:36:17

整体结构
SpringBoot配置多个数据库源

.properties添加多个数据库源

注意url要改为jdbc-url

spring.datasource.login.driver-class-name=org.sqlite.JDBC
spring.datasource.login.jdbc-url=jdbc:sqlite:C:/Users/catface/Desktop/user.db

spring.datasource.register.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.register.jdbc-url=jdbc:mysql://127.0.0.1:3306/register?characterEncoding=UTF-8
spring.datasource.register.username=root
spring.datasource.register.password=root

注入数据源并扫描dao路径

主数据库(项目启动默认连接该数据库)有@Primary注解,从数据库没有

@Configuration// basePackages为dao文件所在目录@MapperScan(basePackages="cc.catface.sbt_test.multi_sql_source.login.dao", sqlSessionTemplateRef="loginSqlSessionTemplate")publicclassLoginDataSourceConfig{@Bean(name="loginDataSource")@ConfigurationProperties(prefix="spring.datasource.login")@PrimarypublicDataSourceloginDataSource(){returnDataSourceBuilder.create().build();}@Bean(name="loginSqlSessionFactory")@PrimarypublicSqlSessionFactoryloginSqlSessionFactory(@Qualifier("loginDataSource")DataSource dataSource)throwsException{SqlSessionFactoryBean bean=newSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath:mapper/login/*.xml"));return bean.getObject();}@Bean(name="loginTransactionManager")@PrimarypublicDataSourceTransactionManagerloginTransactionManager(@Qualifier("loginDataSource")DataSource dataSource){returnnewDataSourceTransactionManager(dataSource);}@Bean(name="loginSqlSessionTemplate")@PrimarypublicSqlSessionTemplateloginSqlSessionTemplate(@Qualifier("loginSqlSessionFactory")SqlSessionFactory sqlSessionFactory)throwsException{returnnewSqlSessionTemplate(sqlSessionFactory);}}

@Configuration// basePackages为dao文件所在目录@MapperScan(basePackages="cc.catface.sbt_test.multi_sql_source.register.dao", sqlSessionTemplateRef="registerSqlSessionTemplate")publicclassRegisterDataSourceConfig{@Bean(name="registerDataSource")@ConfigurationProperties(prefix="spring.datasource.register")publicDataSourceregisterDataSource(){returnDataSourceBuilder.create().build();}@Bean(name="registerSqlSessionFactory")publicSqlSessionFactoryregisterSqlSessionFactory(@Qualifier("registerDataSource")DataSource dataSource)throwsException{SqlSessionFactoryBean bean=newSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath:mapper/register/*.xml"));return bean.getObject();}@Bean(name="registerTransactionManager")publicDataSourceTransactionManagerregisterTransactionManager(@Qualifier("registerDataSource")DataSource dataSource){returnnewDataSourceTransactionManager(dataSource);}@Bean(name="registerSqlSessionTemplate")publicSqlSessionTemplateregisterSqlSessionTemplate(@Qualifier("registerSqlSessionFactory")SqlSessionFactory sqlSessionFactory)throwsException{returnnewSqlSessionTemplate(sqlSessionFactory);}}

编写Dao、Service、Controller

  1. pojo

    publicclassUser{privateString username;privateString password;// setter&getter...}
  2. dao

    @Repository@MapperpublicinterfaceLoginDao{List<User>getUsers();}

    @Repository@MapperpublicinterfaceRegisterDao{List<User>getUsers();}
  3. mapper

    文件目录分别在resources/mapper/login和resources/mapper/register下

    注意命名和dao保持一致,LoginDao对应LoginMapper,RegisterDao对应RegisterMapper

    <!-- LoginMapper.xml --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="cc.catface.sbt_test.multi_sql_source.login.dao.LoginDao"><selectid="getUsers"resultType="cc.catface.sbt_test.multi_sql_source.pojo.User">
            select username,password from user;</select></mapper>

    <!-- RegisterMapper.xml --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="cc.catface.sbt_test.multi_sql_source.register.dao.RegisterDao"><selectid="getUsers"resultType="cc.catface.sbt_test.multi_sql_source.pojo.User">
            select username,password from register;</select></mapper>
  4. service

    @ServicepublicclassLoginService{@AutowiredLoginDao mLoginDao;publicList<User>getUsers(){return mLoginDao.getUsers();}}

    @ServicepublicclassRegisterService{@AutowiredRegisterDao mRegisterDao;publicList<User>getUsers(){return mRegisterDao.getUsers();}}
  5. controller

    @Controller@RequestMapping(value="/multi_sql")publicclassTestController{@AutowiredLoginService loginService;@AutowiredRegisterService registerService;@ResponseBody@RequestMapping("/login")publicStringgetUsersByLogin(){return loginService.getUsers().toString();}@ResponseBody@RequestMapping("/register")publicStringgetUsersByRegister(){return registerService.getUsers().toString();}}
  • 作者:itCatface
  • 原文链接:https://blog.csdn.net/itCatface/article/details/117949147
    更新时间:2022年6月5日08:36:17 ,共 4571 字。