项目配置多数据源举例。
属性配置
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文件也要放到对应的包名下
在项目启动时,包名下必须要有文件,否则项目会启动失败。