SpringBoot多数据源配置

项目配置多数据源举例。

属性配置

1
2
3
4
5
6
7
8
9
10
#主数据库
primary.spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
primary.spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/vueblog?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
primary.spring.datasource.username=root
primary.spring.datasource.password=root
#备数据库
secondary.spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
secondary.spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/vueuser?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
secondary.spring.datasource.username=root
secondary.spring.datasource.password=root

配置类

每一个数据源对应一个配置类

主数据源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
* 多数据源配置
*/
@Configuration
@MapperScan(basePackages = "com.example.springcloud0614.mapper.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {

//主数据源配置
@Primary
@Bean("primary")
@ConfigurationProperties(prefix = "primary.spring.datasource")
public DataSource primaryDataSourceProperties() {
return DataSourceBuilder.create().build();
}

//主数据源
@Primary
@Bean("primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primary") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));
return bean.getObject();
}

@Primary
@Bean("primarySqlSessionTemplate")
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory factory) {
return new SqlSessionTemplate(factory);
}
}

备数据源配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
* 多数据源配置
*/
@Configuration
@MapperScan(basePackages = "com.example.springcloud0614.mapper.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {

@Bean("secondary")
@ConfigurationProperties(prefix = "secondary.spring.datasource")
public DataSource secondaryDataSourceProperties() {
return DataSourceBuilder.create().build();
}

@Bean("secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondary") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));
return bean.getObject();
}

@Bean("secondarySqlSessionTemplate")
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory factory) {
return new SqlSessionTemplate(factory);
}
}

目录结构

mapper下的java文件必须放到对应的包名下

同样的xml文件也要放到对应的包名下

在项目启动时,包名下必须要有文件,否则项目会启动失败。