spring boot mybatis 多数据源

不多说,直接上代码

application.properties
spring.datasource.dev.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dev.username=root
spring.datasource.dev.password=root
spring.datasource.dev.jdbc-url=jdbc\:mysql\://ip\:3306/dev?autoReconnect\=true\&failOverReadOnly\=false&characterEncoding\=utf8

spring.datasource.dev1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dev1.username=root
spring.datasource.dev1.password=root
spring.datasource.dev1.jdbc-url=jdbc\:mysql\://ip\:3306/dev1?autoReconnect\=true\&failOverReadOnly\=false&characterEncoding\=utf8

创建config包,创建相应的配置文件
DataSourseConfig.java

@Configuration这个注解不能缺少,缺少了不起作用。
@Primary //第一个使用此注解,此后其他配置类删除此注解

/**
 * @author john
 * @date 2019/2/21
 */
@Configuration
@MapperScan(basePackages = "com.test.dao.dev",sqlSessionTemplateRef = "testSqlSessionTemplate")
public class DataSourseConfig {
    @Bean(name = "testDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dev")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "testSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //使用注解,所以注掉此行,使用xml开启这行
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/dev/*.xml"));
        return bean.getObject();
    }

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

    @Bean(name = "testSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
DataSourse1Config.java

@Primary 删除,只有第一个配置要添加

/**
 * @author john
 * @date 2019/2/21
 */
@Configuration 
@MapperScan(basePackages = "com.test.dao.dev1",sqlSessionTemplateRef = "test1SqlSessionTemplate")
public class DataSourse1Config {
    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dev1")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

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

    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
创建dao包,分dev和dev1

只粘贴一个dao类作为实例。

/**
 * @author john
 * @date 2019/2/21
 */
public interface TestDao {
    /**
     * 查询
     * @param keyword
     * @return
     * @throws Exception
     */
    @Select("select * from t_test where keyword like #{keyword}")
    List<TestBean> select(@Param("keyword")String keyword)throws Exception;

    /**
     * 更新url
     * @param url
     * @param id
     * @return
     * @throws Exception
     */
    @Update("update t_test set url=#{url} where id =#{id}")
    int update(@Param("url")String url,@Param("id")long id)throws Exception;
}

启动类

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class EmotionApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(EmotionApplication.class, args);
    }
}

TestService

/**
 * @author john
 * @date 2019/2/21
 */
@Component
public class EmotionService {

    @Autowired
    TestDao testDao;

    public void init(Map<String,String> map)throws Exception{
        testDao.update("http://",12);
           System.out.println("="+keyword+"查询结果保存完成");
            
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中使用MyBatis实现多数据源的方式有很多种,下面介绍两种常用的方法。 方法一:使用Spring Boot的自动配置 1.在application.yml或application.properties中定义多个数据源的配置信息,如下所示: ``` # 数据源1 spring.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/db_master spring.datasource.master.username=root spring.datasource.master.password=123456 spring.datasource.master.driver-class-name=com.mysql.jdbc.Driver # 数据源2 spring.datasource.slave.jdbc-url=jdbc:mysql://localhost:3306/db_slave spring.datasource.slave.username=root spring.datasource.slave.password=123456 spring.datasource.slave.driver-class-name=com.mysql.jdbc.Driver ``` 2.创建多个数据源的连接池和SqlSessionFactory,可以使用Spring Boot自动配置的方式来实现。只需要在配置类上添@MapperScan注解即可,如下所示: ``` @Configuration @MapperScan(basePackages = "com.example.mapper") public class MybatisConfig { @Bean @ConfigurationProperties(prefix="spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix="spring.datasource.slave") public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "masterSqlSessionFactory") public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(masterDataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*.xml")); return bean.getObject(); } @Bean(name = "slaveSqlSessionFactory") public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource slaveDataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(slaveDataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/*.xml")); return bean.getObject(); } @Bean(name = "masterSqlSessionTemplate") public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } @Bean(name = "slaveSqlSessionTemplate") public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 3.在Mapper接口中使用@Qualifier注解来指定使用哪个数据源,如下所示: ``` public interface UserMapper { @Select("select * from user") @Qualifier("masterSqlSessionFactory") List<User> selectAllMaster(); @Select("select * from user") @Qualifier("slaveSqlSessionFactory") List<User> selectAllSlave(); } ``` 方法二:手动配置多个数据源 1.定义多个数据源的配置信息,如下所示: ``` @Configuration public class DataSourceConfig { @Bean(name = "masterDataSource") @ConfigurationProperties(prefix="spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "slaveDataSource") @ConfigurationProperties(prefix="spring.datasource.slave") public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } } ``` 2.创建多个SqlSessionFactory,如下所示: ``` @Configuration public class MybatisConfig { @Autowired @Qualifier("masterDataSource") private DataSource masterDataSource; @Autowired @Qualifier("slaveDataSource") private DataSource slaveDataSource; @Bean(name = "masterSqlSessionFactory") public SqlSessionFactory masterSqlSessionFactory() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(masterDataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*.xml")); return bean.getObject(); } @Bean(name = "slaveSqlSessionFactory") public SqlSessionFactory slaveSqlSessionFactory() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(slaveDataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/*.xml")); return bean.getObject(); } @Bean(name = "masterSqlSessionTemplate") public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } @Bean(name = "slaveSqlSessionTemplate") public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 3.在Mapper接口中使用@Qualifier注解来指定使用哪个数据源,如下所示: ``` public interface UserMapper { @Select("select * from user") @Qualifier("masterSqlSessionFactory") List<User> selectAllMaster(); @Select("select * from user") @Qualifier("slaveSqlSessionFactory") List<User> selectAllSlave(); } ``` 以上就是Spring Boot中使用MyBatis实现多数据源的两种常用方法,具体使用哪种方法,可以根据自己的实际情况来选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值