一、添加依赖
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
二、application.properties 添加配置:
datasource.datasourceA.url=jdbc:mysql://localhost:3306/test datasource.datasourceA.username=root datasource.datasourceA.password=open123 datasource.datasourceA.driver-class-name=com.mysql.jdbc.Driver datasource.datasourceA.max-idle=10 datasource.datasourceA.max-wait=10000 datasource.datasourceA.min-idle=5 datasource.datasourceA.initial-size=5 datasource.datasourceA.validation-query=SELECT 1 datasource.datasourceA.test-on-borrow=false datasource.datasourceA.test-while-idle=true datasource.datasourceA.time-between-eviction-runs-millis=18800datasource.datasourceB.url=jdbc:mysql://localhost:3306/test_fun
datasource.datasourceB.username=root datasource.datasourceB.password=open123 datasource.datasourceB.driver-class-name=com.mysql.jdbc.Driver datasource.datasourceB.max-idle=10 datasource.datasourceB.max-wait=10000 datasource.datasourceB.min-idle=5 datasource.datasourceB.initial-size=5 datasource.datasourceB.validation-query=SELECT 1 datasource.datasourceB.test-on-borrow=false datasource.datasourceB.test-while-idle=true datasource.datasourceB.time-between-eviction-runs-millis=18800
三、数据源配置(只列举一个,另一个类似)
@Configuration
public class DatasourceAConfig { /*** * 有什么作用呢? * 简单地说,当有两个同一类型的Bean,依赖注入时你没有指定name,正常情况下会报错,有两个你要的Bean,识别不了。 * 但是 相当于指定这个Bean为默认的,如果你没有指定name,就采用 标识的Bean。 * **/ @Bean(name = "datasourceA") @ConfigurationProperties(prefix = "datasource.datasourceA") public DataSource dataSource() { return DataSourceBuilder.create().build(); }@Primary
@Bean(name = "datasourceATransactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("datasourceA") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
四,Mapper配置(只列举一个,另一个类似)
@Configuration
@MapperScan(basePackages = {"com.example.source.source_a"}, sqlSessionFactoryRef = "datasourceASqlSessionFactory") public class MapperAConfig { @Primary @Bean(name = "datasourceASqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("datasourceA") DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setTypeAliasesPackage("com.example.source.source_a.model");PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setMapperLocations(resolver .getResources("classpath*:com/example/source/source_a/mapper/**/*.xml")); return factoryBean.getObject(); } }
五、给Mapper添加别名,以防止命名冲突:
@Repository(value="userMapperA")
public interface UserMapper {.......
}
六、使用:
@Autowired
private UserMapper userMapper;
注意:一般情况下,各个数据源 其bean mapper dao 配置的路径是不同的,所以 在dao的引入过程中,引入的类的路径 就决定了 自动装配时 用的 数据源种类