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")
public class LoginDataSourceConfig {

    @Bean(name = "loginDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.login")
    @Primary
    public DataSource loginDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "loginSqlSessionFactory")
    @Primary
    public SqlSessionFactory loginSqlSessionFactory(@Qualifier("loginDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/login/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "loginTransactionManager")
    @Primary
    public DataSourceTransactionManager loginTransactionManager(@Qualifier("loginDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "loginSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate loginSqlSessionTemplate(@Qualifier("loginSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

@Configuration
// basePackages为dao文件所在目录
@MapperScan(basePackages = "cc.catface.sbt_test.multi_sql_source.register.dao", sqlSessionTemplateRef = "registerSqlSessionTemplate")
public class RegisterDataSourceConfig {

    @Bean(name = "registerDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.register")
    public DataSource registerDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "registerSqlSessionFactory")
    public SqlSessionFactory registerSqlSessionFactory(@Qualifier("registerDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/register/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "registerTransactionManager")
    public DataSourceTransactionManager registerTransactionManager(@Qualifier("registerDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "registerSqlSessionTemplate")
    public SqlSessionTemplate registerSqlSessionTemplate(@Qualifier("registerSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

编写Dao、Service、Controller

  1. pojo

    public class User {
        private String username;
        private String password;
        // setter&getter...
    }
    
  2. dao

    @Repository
    @Mapper
    public interface LoginDao {
        List<User> getUsers();
    }
    

    @Repository
    @Mapper
    public interface RegisterDao {
        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" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cc.catface.sbt_test.multi_sql_source.login.dao.LoginDao">
        <select id="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" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cc.catface.sbt_test.multi_sql_source.register.dao.RegisterDao">
        <select id="getUsers" resultType="cc.catface.sbt_test.multi_sql_source.pojo.User">
            select username,password from register;
        </select>
    </mapper>
    
  4. service

    @Service
    public class LoginService {
    
        @Autowired
        LoginDao mLoginDao;
    
        public List<User> getUsers() {
            return mLoginDao.getUsers();
        }
    }
    

    @Service
    public class RegisterService {
    
        @Autowired
        RegisterDao mRegisterDao;
    
        public List<User> getUsers() {
            return mRegisterDao.getUsers();
        }
    }
    
  5. controller

    @Controller
    @RequestMapping(value = "/multi_sql")
    public class TestController {
        
        @Autowired
        LoginService loginService;
        @Autowired
        RegisterService registerService;
        
        @ResponseBody
        @RequestMapping("/login")
        public String getUsersByLogin() {
            return loginService.getUsers().toString();
        }
        
        @ResponseBody
        @RequestMapping("/register")
        public String getUsersByRegister() {
            return registerService.getUsers().toString();
        }
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值