SpringBoot配置JDBC、MyBatis多数据源
项目结构
MyBatis多数据源
配置文件
spring:
datasource:
hikari:
ds1:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/QCDepartment?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: huafeng
ds2:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/spring_boot?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: huafeng
配置类
@Configuration
@MapperScan(basePackages = "com.luckytiger.multi.data.source.mapper1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class MyBatis1DataSourceConfig {
@Bean(name = "db1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.hikari.ds1")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "db1SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
/**
* 配置事务管理
*/
@Bean(name = "db1TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "db1SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
测试类
@Autowired
private RemindEventsMapper remindEventsMapper;
@Autowired
private SecUserMapper secUserMapper;
@Test
void mybatis1(){
RemindEvents load = remindEventsMapper.load(1);
System.out.println(load);
}
@Test
void mybatis2(){
SecUser load = secUserMapper.load(1);
System.out.println(load);
}
JDBC多数据源
配置文件
spring:
datasource:
ds1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://101.37.76.243:3306/QCDepartment?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: huafeng
ds2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://101.37.76.243:3306/spring_boot?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: huafeng
配置类
多数据源配置
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "ds1DataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.ds1")
public DataSourceProperties ds1DataSourceProperties() {
return new DataSourceProperties();
}
@Primary
@Bean(name = "ds1DataSource")
public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean(name = "ds2DataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.ds2")
public DataSourceProperties ds2DataSourceProperties() {
return new DataSourceProperties();
}
@Bean("ds2DataSource")
public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
}
JDBC配置类
@Configuration
public class JdbcTemplateDataSourceConfig {
@Primary
@Bean(name = "ds1JdbcTemplate")
public JdbcTemplate ds1JdbcTemplate(@Qualifier("ds1DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "ds2JdbcTemplate")
public JdbcTemplate ds2JdbcTemplate(@Qualifier("ds2DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
测试类
@Autowired
@Qualifier("ds1JdbcTemplate")
private JdbcTemplate template1;
@Autowired
@Qualifier("ds2JdbcTemplate")
private JdbcTemplate template2;
@Test
void contextLoads() {
BeanPropertyRowMapper<RemindEvents> rowMapper = new BeanPropertyRowMapper<>(RemindEvents.class);
RemindEvents remindEvents = template1.queryForObject("select * from remind_events where id = ?", rowMapper, 1);
System.out.println(remindEvents);
}
@Test
void context(){
BeanPropertyRowMapper<SecUser> rowMapper = new BeanPropertyRowMapper<>(SecUser.class);
SecUser secUser = template2.queryForObject("select * from sec_user where id = ?", rowMapper, 1);
System.out.println(secUser);
}