单数据源
多数据源
单数据源
1. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
2. 创建model和mapper
可以使用自动生成工具
3. 添加mybatis配置
mybatis:
type-aliases-package: com.example.springbootdemo.model
mapper-locations: classpath:mapper/*.xml
spring:
datasource:
url: jdbc:mysql://xxxxxx/datasouce?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: xxxxxx
password: xxxxxx
4. 启动类添加注解@MapperScan
多数据源
1. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
2. 创建model和mapper
可以使用自动生成工具
3. 添加多数据源配置
spring:
datasource:
hikari:
first:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://xxxxxx:3306/xxx?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: xxx
password: xxx
second:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://xxxxxx:3306/xxx?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: xxx
password: xx
4. 创建数据源配置类,每个数据源单独配置
@Configuration
@MapperScan(basePackages = "com.example.springbootdemo.mapper", sqlSessionFactoryRef = "firstSqlSessionFactory")
public class FirstDataSourceConfig {
static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
@Bean(name = "firstDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.hikari.first")
public DataSource FirstDataSourceConfig() {
return DataSourceBuilder.create().build();
}
@Bean(name = "firstTransactionManager")
@Primary
public DataSourceTransactionManager firstTransactionManager() {
return new DataSourceTransactionManager(FirstDataSourceConfig());
}
@Bean(name = "firstSqlSessionFactory")
@Primary
public SqlSessionFactory firstSqlSessionFactory(@Qualifier("firstDataSource") DataSource firstDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(firstDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(FirstDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
@Configuration
@MapperScan(basePackages = "com.example.springbootdemo.mapper", sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
@Bean(name = "secondDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.hikari.second")
public DataSource SecondDataSourceConfig() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondTransactionManager")
@Primary
public DataSourceTransactionManager secondTransactionManager() {
return new DataSourceTransactionManager(SecondDataSourceConfig());
}
@Bean(name = "secondSqlSessionFactory")
@Primary
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource secondDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(secondDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(FirstDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
5. 启动类排除DataSourceAutoConfiguration.class
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}