SpringBoot整合Mybatis多数据源

来源:互联网 发布:网络公司简介怎么写 编辑:程序博客网 时间:2024/06/14 01:59

本文利用MyBatis-Spring-Boot-Starter整合springboot和mybatis,无xml配置,实现多数据源配置。官方文档参考

以下示例代码:

1、数据源1 。指明project.demo.mod_user包下的mappers将使用sqlSessionFactory_mysql1。

@Configuration@ConfigurationProperties(locations = "classpath:server.yml",prefix = "mybatis.mysql1")@MapperScan(sqlSessionFactoryRef = "sqlSessionFactory_mysql1",        basePackages = {"project.demo.mod_user"})public class DataSourceMysql1Conf {    private String url;    private String username;    private String password;    @Bean(name = "dataSource_mysql1")    @Primary    public DataSource dataSource(){        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName("com.mysql.jdbc.Driver");        dataSource.setUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        dataSource.setTestWhileIdle(true);        dataSource.setValidationQuery("select 1");        return dataSource;    }    /**     * spring transaction mng     */    @Bean(name = "transactionManager_mysql1")    @Primary    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource_mysql1") DataSource rdsDataSource) {        return new DataSourceTransactionManager(rdsDataSource);    }    /**     * mybatis session factory     */    @Bean(name = "sqlSessionFactory_mysql1")    @Primary    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource_mysql1")DataSource rdsDataSource) throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(rdsDataSource);        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();        configuration.setCacheEnabled(true);        sessionFactory.setConfiguration(configuration);        return sessionFactory.getObject();    }    // setter/getter ...}

2、数据源2 。

@Configuration@ConfigurationProperties(locations = "classpath:server.yml",prefix = "mybatis.mysql2")@MapperScan(sqlSessionFactoryRef = "sqlSessionFactory_mysql2",        basePackages = {"project.demo.mod_other"})public class DataSourceMysql2Conf {    private String url;    private String username;    private String password;    @Bean(name = "dataSource_mysql2")    public DataSource dataSource2(){        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName("com.mysql.jdbc.Driver");        dataSource.setUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        dataSource.setTestWhileIdle(true);        dataSource.setValidationQuery("select 1");        return dataSource;    }    /**     * spring transaction mng     */    @Bean(name = "transactionManager_mysql2")    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource_mysql2") DataSource rdsDataSource) {        return new DataSourceTransactionManager(rdsDataSource);    }    @Bean(name = "sqlSessionFactory_mysql2")    public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource_mysql2")DataSource rdsDataSource) throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(rdsDataSource);        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();        configuration.setCacheEnabled(true);        sessionFactory.setConfiguration(configuration);        return sessionFactory.getObject();    }        // setter/getter ...}

3、mapper

@Mapperpublic interface UserMapper {    @Select("select * from user where id=#{param1}")    User findById(int id);}

4、执行

@Component@Transactional(transactionManager = "transactionManager_mysql1",rollbackFor = Exception.class)public class InitRunner implements CommandLineRunner {    @Autowired    private UserMapper userMapper;    @Override    public void run(String... args) throws Exception {        /** userMapper使用的是mysql1的数据源 */        System.out.println(userMapper.findById(10));    }}

5、依赖(gradle)

    compile("org.springframework.boot:spring-boot-starter-web")    compile 'org.mybatis:mybatis:3.4.2'    compile 'mysql:mysql-connector-java:5.1.30'    compile group: 'com.alibaba', name: 'druid', version: '1.0.26'    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '1.2.0'
原创粉丝点击