spring boot使用总结(六)spring boot+mybatis配置多数据库

  1. mybatis是比较常用的数据库框架,在spring boot使用mybatis需要在pom文件中增加如下配置:
       
          org.mybatis
          mybatis
          3.2.3
      
      
          org.mybatis
          mybatis-spring
          1.2.2
      
      
          mysql
          mysql-connector-java
      
  1. 配置数据库连接,如果是使用默认的tomcat作为内嵌的web服务器,需要增加如下配置:
       
            org.apache.tomcat
            tomcat-jdbc
        
        
            org.springframework
            spring-jdbc
        
  1. 配置单个数据库连接
@Configuration
public class DatabaseConfig {
    @Bean
    @ConfigurationProperties(prefix = "test.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

使用 @ConfigurationProperties(prefix = "test.datasource")可以直接从application.xml中读取数据库的配置信息。
application.xml文件中的数据库配置信息如下:

test.datasource.url=jdbc:mysql://10.10.10.10:3306/testdb?characterEncoding=utf-8
test.datasource.username=test
test.datasource.password=test
test.datasource.driverClassName=com.mysql.jdbc.Driver
test.datasource.test-on-borrow=true
test.datasource.validation-query=SELECT 1
  1. 配置多个数据库连接。如果项目中需要连接多个数据库,可以分别进行配置,例如要连接两个数据库test1,test2,可以这么写,首先配置第一个数据库:
@Configuration
public class FirstDatabaseConfig {

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "test1.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }

    @Bean
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

需要注意的是,如果有超过一个数据库,需要指定一个数据库为首选数据库,用@Primary注解标注出来。在创建DataSource,SqlSessionFactory,SqlSessionTemplate时都需要标注出来。
另外如果不特别用 @Bean的name属性写明bean的变量名的话,bean的默认变量名为创建bean的方法名,例如上文DataSource的实例的变量名为dataSource。
然后再配置第二个数据库:

@Configuration
public class SecondDatabaseConfig {

    @Bean
    @ConfigurationProperties(prefix = "test2.datasource")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory secondSqlSessionFactory(
            @Qualifier("secondDataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }

    @Bean
    public SqlSessionTemplate secondSqlSessionTemplate(
            @Qualifier("secondSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

在创建第二个数据库时,需要注意的是要使用@Qualifier注解来说明要注入的实例的变量名是什么。如果不用@Qualifier注解,会注入首选实例,即用@Primary注解标明的实例。

版本说明:spring boot版本为1.4.0.RELEASE,其他组件版本见pom文件

参考文档:

  1. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html
  2. http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/properties/ConfigurationProperties.html
  3. http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Primary.html
  4. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Qualifier.html

你可能感兴趣的:(spring boot使用总结(六)spring boot+mybatis配置多数据库)