Browse Source

💡 添加相关注释

pull/1/head
Yangkai.Shen 5 years ago
parent
commit
a93805b09f
6 changed files with 21 additions and 4 deletions
  1. +3
    -0
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplication.java
  2. +1
    -1
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/annotation/DefaultDatasource.java
  3. +5
    -1
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/aspect/DatasourceSelectorAspect.java
  4. +1
    -1
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MybatisConfiguration.java
  5. +9
    -1
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DynamicDataSource.java
  6. +2
    -0
      spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/UserMapper.java

+ 3
- 0
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/SpringBootDemoDynamicDatasourceApplication.java View File

@@ -31,9 +31,12 @@ public class SpringBootDemoDynamicDatasourceApplication implements CommandLineRu

@Override
public void run(String... args) {
// 设置默认的数据源
DatasourceConfigContextHolder.setDefaultDatasource();
// 查询所有数据库配置列表
List<DatasourceConfig> datasourceConfigs = configMapper.selectAll();
System.out.println("加载其余数据源配置列表: " + datasourceConfigs);
// 将数据库配置加入缓存
datasourceConfigs.forEach(config -> DatasourceConfigCache.INSTANCE.addConfig(config.getId(), config));
}
}

+ 1
- 1
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/annotation/DefaultDatasource.java View File

@@ -4,7 +4,7 @@ import java.lang.annotation.*;

/**
* <p>
* 默认数据源
* 用户标识仅可以使用默认数据源
* </p>
*
* @author yangkai.shen


+ 5
- 1
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/aspect/DatasourceSelectorAspect.java View File

@@ -37,7 +37,7 @@ public class DatasourceSelectorAspect {
}

/**
* 前置通知 用于拦截操作
* 前置操作,拦截具体请求,获取header里的数据源id,设置线程变量里,用于后续切换数据源
*/
@Before("datasourcePointcut()")
public void doBefore(JoinPoint joinPoint) {
@@ -45,6 +45,7 @@ public class DatasourceSelectorAspect {
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();

// 排除不可切换数据源的方法
DefaultDatasource annotation = method.getAnnotation(DefaultDatasource.class);
if (null != annotation) {
DatasourceConfigContextHolder.setDefaultDatasource();
@@ -62,6 +63,9 @@ public class DatasourceSelectorAspect {
}
}

/**
* 后置操作,设置回默认的数据源id
*/
@AfterReturning("datasourcePointcut()")
public void doAfter() {
DatasourceConfigContextHolder.setDefaultDatasource();


+ 1
- 1
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/config/MybatisConfiguration.java View File

@@ -19,7 +19,7 @@ import javax.sql.DataSource;
* @date Created in 2019/9/4 16:20
*/
@Configuration
@MapperScan(basePackages = "com.xkcoding.dynamicdatasource.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
@MapperScan(basePackages = "com.xkcoding.dynamic.datasource.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
public class MybatisConfiguration {
/**
* 创建会话工厂。


+ 9
- 1
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/datasource/DynamicDataSource.java View File

@@ -33,17 +33,24 @@ public class DynamicDataSource extends HikariDataSource {
return datasource.getConnection();
}

/**
* 初始化数据源
* @param id 数据源id
* @return 数据源
*/
private HikariDataSource initDatasource(Long id) {
HikariDataSource dataSource = new HikariDataSource();

// 判断是否是默认数据源
if (DatasourceHolder.DEFAULT_ID.equals(id)) {
// 默认数据源根据 application.yml 配置的生成
DataSourceProperties properties = SpringUtil.getBean(DataSourceProperties.class);
dataSource.setJdbcUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
} else {
// 获取数据库的配置
// 不是默认数据源,通过缓存获取对应id的数据源的配置
DatasourceConfig datasourceConfig = DatasourceConfigCache.INSTANCE.getConfig(id);

if (datasourceConfig == null) {
@@ -55,6 +62,7 @@ public class DynamicDataSource extends HikariDataSource {
dataSource.setPassword(datasourceConfig.getPassword());
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
}
// 将创建的数据源添加到数据源管理器中,绑定当前线程
DatasourceHolder.INSTANCE.addDatasource(id, dataSource);
return dataSource;
}


+ 2
- 0
spring-boot-demo-dynamic-datasource/src/main/java/com/xkcoding/dynamic/datasource/mapper/UserMapper.java View File

@@ -2,6 +2,7 @@ package com.xkcoding.dynamic.datasource.mapper;

import com.xkcoding.dynamic.datasource.config.MyMapper;
import com.xkcoding.dynamic.datasource.model.User;
import org.apache.ibatis.annotations.Mapper;

/**
* <p>
@@ -11,5 +12,6 @@ import com.xkcoding.dynamic.datasource.model.User;
* @author yangkai.shen
* @date Created in 2019/9/4 16:49
*/
@Mapper
public interface UserMapper extends MyMapper<User> {
}

Loading…
Cancel
Save