天天看點

SpringBoot內建Mybatis實作多資料源

SpringBoot 內建 Mybatis實作雙資料源

Mybatis 常用ORM工具,不過多介紹,與SpringBoot內建實作單資料源可參考:

https://github.com/liaozihong/SpringBoot-Learning/tree/master/SpringBoot-Mybatis

導入jar包,使用druid連接配接池

compile group: 'com.alibaba', name: 'druid', version: '1.1.10'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.46'
compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '1.3.2'
           

前景

項目需要用到兩個資料庫,也就是雙資料源Spring資料庫和Test資料庫,Mybatis的配置如下:

配置示例

配置Mybatis,配置兩個DataSource資料源,并表示Bean名

@Configuration
public class MybatisConfiguration {
    /**
     * spring資料庫配置字首.
     */
    final static String SPRING_PREFIX = "spring.datasource.spring";
    /**
     * test資料庫配置字首.
     */
    final static String TEST_PREFIX = "spring.datasource.test";

    /**
     * The constant logger.
     */
    final static Logger logger = LoggerFactory.getLogger(MybatisConfiguration.class);

    /**
     * 配置druid顯示監控統計資訊
     * 開啟Druid的監控平台 http://localhost:8080/druid
     *
     * @return servlet registration bean
     */
    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("Init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // IP白名單,不設預設都可以
//        servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
        // IP黑名單(共同存在時,deny優先于allow)
        servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
        //控制台管理使用者
        servletRegistrationBean.addInitParameter("loginUsername", "root");
        servletRegistrationBean.addInitParameter("loginPassword", "dashuai");
        //是否能夠重置資料 禁用HTML頁面上的“Reset All”功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    /**
     * 注冊一個filterRegistrationBean
     *
     * @return filter registration bean
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加過濾規則
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式資訊
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

    /**
     * Spring data source data source.
     *
     * @return the data source
     */
    @Bean(name = "SpringDataSource")
    @ConfigurationProperties(prefix = SPRING_PREFIX)  // application.properties中對應屬性的字首
    public DataSource springDataSource() {
        return new DruidDataSource();
    }

    /**
     * Test data source data source.
     *
     * @return the data source
     */
    @Bean(name = "TestDataSource")
    @ConfigurationProperties(prefix = TEST_PREFIX)  // application.properties中對應屬性的字首
    public DataSource testDataSource() {
        return new DruidDataSource();
    }
}
           

配置Spring資料庫的資料源

/**
 * 注意basePackages 指定掃描Mapper的包路徑,sqlSessionFactoryRef 指定sql session工廠,跟下面的方法名相等
 */
@Configuration
@MapperScan(basePackages = {"com.dashaui.learning.multisource.mapper.spring"}, sqlSessionFactoryRef = "springSqlSessionFactory")
public class SpringDataSourceConfiguration {
    /**
     * The constant MAPPER_XML_LOCATION.
     */
    public static final String MAPPER_XML_LOCATION = "classpath:mapper/spring/*.xml";

    /**
     * The Open plat form data source.
     */
    @Autowired
    @Qualifier("SpringDataSource")
    DataSource springDataSource;

    /**
     * 配置Sql Session模闆
     *
     * @return the sql session template
     * @throws Exception the exception
     */
    @Bean
    public SqlSessionTemplate springSqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(springSqlSessionFactory());
    }

    /**
     * 配置SQL Session工廠
     *
     * @return the sql session factory
     * @throws Exception the exception
     */
    @Bean
    public SqlSessionFactory springSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(springDataSource);
        //指定XML檔案路徑
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
        return factoryBean.getObject();
    }
}

           

配置Test資料庫的資料源

@Configuration
@MapperScan(basePackages = {"com.dashaui.learning.multisource.mapper.test"}, sqlSessionFactoryRef = "testSqlSessionFactory")
public class TestDataSourceConfiguration {
    /**
     * The constant MAPPER_XML_LOCATION.
     */
    public static final String MAPPER_XML_LOCATION = "classpath:mapper/test/*.xml";

    /**
     * The Open plat form data source.
     */
    @Autowired
    @Qualifier("TestDataSource")
    DataSource testDataSource;

    /**
     * Open plat form sql session template sql session template.
     *
     * @return the sql session template
     * @throws Exception the exception
     */
    @Bean
    public SqlSessionTemplate testSqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(testSqlSessionFactory());
    }

    /**
     * Open plat form sql session factory sql session factory.
     *
     * @return the sql session factory
     * @throws Exception the exception
     */
    @Bean
    public SqlSessionFactory testSqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(testDataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
        return factoryBean.getObject();
    }
}
           

配置成功即可。配置注意掃描包的路徑和DataSource的name,不要混了。個人實驗沒問題。

Github位址:https://github.com/liaozihong/SpringBoot-Learning/tree/master/SpringBoot-Mybatis-Multisource

繼續閱讀