- mybatis是比较常用的数据库框架,在spring boot使用mybatis需要在pom文件中增加如下配置:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 配置数据库连接,如果是使用默认的tomcat作为内嵌的web服务器,需要增加如下配置:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
- 配置单个数据库连接
@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
- 配置多个数据库连接。如果项目中需要连接多个数据库,可以分别进行配置,例如要连接两个数据库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文件
参考文档:
- https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html
- http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/properties/ConfigurationProperties.html
- http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Primary.html
- http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Qualifier.html