zhaowenxuan
2025-02-07 5563f9d2c54277297eda3db7924997392d9ce887
20250207
2个文件已修改
2个文件已添加
3 文件已重命名
77 ■■■■■ 已修改文件
ltkj-common/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/db/DataSourceConfig.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/db/DataSourceContextHolder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/db/DynamicDataSource.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/src/main/java/com/ltkj/common/db/anno/DataSource.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/DBChangeInterceptor.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-framework/src/main/java/com/ltkj/framework/config/TokenInterceptor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-common/pom.xml
@@ -298,6 +298,12 @@
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.23.5</version>
        </dependency>
        <!-- 阿里数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>
ltkj-common/src/main/java/com/ltkj/common/db/DataSourceConfig.java
File was renamed from ltkj-admin/src/main/java/com/ltkj/web/db/DataSourceConfig.java
@@ -1,9 +1,8 @@
package com.ltkj.web.db;
package com.ltkj.common.db;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
@@ -12,6 +11,18 @@
//@Configuration
public class DataSourceConfig {
    // 使用代码
//    try {
//        long id = Long.parseLong(request.getAttribute("id").toString());
//        DataSourceContextHolder.setDataSourceKey(String.valueOf(id));
//        dataSourceConfig.addDataSource(String.valueOf(id)); // 确保数据源已注册
//        if (log.getSize()>50) log.setSize(50);
//        if (log.getLang().equals("zh-cn")) log.setLang("zh");
//        return serverLogService.getLog(log,id);
//    }finally {
//        DataSourceContextHolder.setDataSourceKey("default"); // 切换回主库
//    }
    private static final String DEFAULT_DATA_SOURCE_KEY = "default"; // 主库的标识
    private final Map<String, DataSource> dataSourceCache = new HashMap<>(); // 数据源缓存
ltkj-common/src/main/java/com/ltkj/common/db/DataSourceContextHolder.java
File was renamed from ltkj-admin/src/main/java/com/ltkj/web/db/DataSourceContextHolder.java
@@ -1,4 +1,4 @@
package com.ltkj.web.db;
package com.ltkj.common.db;
public class DataSourceContextHolder {
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
ltkj-common/src/main/java/com/ltkj/common/db/DynamicDataSource.java
File was renamed from ltkj-admin/src/main/java/com/ltkj/web/db/DynamicDataSource.java
@@ -1,4 +1,4 @@
package com.ltkj.web.db;
package com.ltkj.common.db;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
ltkj-common/src/main/java/com/ltkj/common/db/anno/DataSource.java
New file
@@ -0,0 +1,17 @@
package com.ltkj.common.db.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * control类或接口方法标注则进行动态切库
 * @Company: 西安路泰科技有限公司
 * @Author: zhaowenxuan
 * @Date: 2025/02/07 10:30
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface DataSource {
}
ltkj-framework/src/main/java/com/ltkj/framework/config/DBChangeInterceptor.java
New file
@@ -0,0 +1,33 @@
package com.ltkj.framework.config;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.ltkj.common.db.DataSourceContextHolder;
import com.ltkj.hosp.domain.Wxuser;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Order(1)
public class DBChangeInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String token = request.getHeader("token");
        boolean verifyToken = JwtUtils.verifyToken(token);
        if (!verifyToken) {
            response.setStatus(401);
            return false;
        }
        Wxuser wxuser = new Gson().fromJson(JSON.toJSONString(JwtUtils.getClaims(token).get("wxuser")),Wxuser.class);
        UserHoder.set(wxuser);
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        DataSourceContextHolder.setDataSourceKey("default");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
ltkj-framework/src/main/java/com/ltkj/framework/config/TokenInterceptor.java
@@ -4,6 +4,7 @@
import com.google.gson.Gson;
import com.ltkj.hosp.domain.Wxuser;
import io.jsonwebtoken.Claims;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
@@ -14,6 +15,7 @@
 * @Author: 西安路泰科技有限公司/赵佳豪
 * @Date: 2022/11/17 10:11
 */
@Order(-1)
//拦截器(校验token)
public class TokenInterceptor implements HandlerInterceptor {
    @Override