5

本文利用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

@Mapper
public 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'

水木酱
398 声望7 粉丝

戒骄戒躁,勿忘初心