Skip to content

常见问题

作者:唐亚峰 | battcn
字数统计:820 字

环境配置

Nacos 连接失败

现象Connection refusedNacosException

解决

  • 确保 Nacos 已启动,访问 http://localhost:8848/nacos 能打开控制台
  • 检查防火墙,需开放 8848(HTTP)和 9848(gRPC)端口
  • 使用 Nginx 代理时必须用 TCP 转发,不能用 HTTP2

无数据源异常

现象:启动报 No DataSource found

解决

  1. 登录 Nacos 控制台
  2. 创建命名空间 v4-dev(或修改 application.yml 的 namespace)
  3. 导入项目 附件/nacos/ 下的配置 ZIP 包

MINIO 文件上传报错

现象XmlParserException: 前言中不允许有内容

解决:检查 MINIO 端口配置,API 端口默认 9000,控制台端口 9001,不要混淆

Redis 连接失败

现象Cannot get Jedis connection

解决

  • 检查 Redis 服务是否启动
  • 检查 Nacos 中的 redis.properties 配置
  • 确认 Redis 密码是否正确

后端开发

如何获取当前登录用户信息

java
@RequiredArgsConstructor
public class DemoService {
    private final AuthenticationContext context;
    
    public void demo() {
        Long userId = context.getUserId();
        Long tenantId = context.getTenantId();
        String username = context.getUsername();
    }
}

接口 401 未授权

排查步骤

  1. Token 是否过期 → 重新登录
  2. 接口是否需要权限 → 检查 @PreAuthorize 或菜单权限配置
  3. 网关是否正确转发 → 检查网关路由配置

新增服务如何注册到网关

  1. 服务添加 spring-cloud-starter-alibaba-nacos-discovery 依赖
  2. 配置 spring.cloud.nacos.discovery.namespace 与其他服务一致
  3. 网关 routes 中添加路由规则

MyBatis-Plus 分页不生效

解决:确保配置了分页插件

java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
}

动态数据源切换

java
@DS("slave")
public List<User> queryFromSlave() {
    return userMapper.selectList(null);
}

前端开发

前端启动报依赖错误

现象pnpm installpnpm dev 报错

解决

bash
# 确保 Node >= 20,pnpm >= 9
node -v && pnpm -v

# 清理后重装
rm -rf node_modules pnpm-lock.yaml
pnpm install

登录后一直跳转登录页

解决

  • 检查后端 IAM 服务是否启动
  • 检查 Redis 是否正常运行
  • 清除浏览器缓存和 LocalStorage

页面菜单不显示

排查

  1. 检查用户是否分配了角色
  2. 检查角色是否分配了菜单权限
  3. 清除浏览器缓存后重新登录

接口请求 404

排查

  1. 检查 .env 中的 VITE_GLOB_API_URL 配置
  2. 检查网关是否正常运行
  3. 检查接口路径是否正确

数据库

数据库连接失败

现象Communications link failureAccess denied

解决

  • 检查 MySQL 服务是否启动
  • 检查 Nacos 中的数据库配置(用户名、密码、端口)
  • 确认 MySQL 允许远程连接

慢 SQL 排查

sql
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

多租户

租户数据看不到

现象:切换租户后查询不到数据

解决

  • 确认数据的 tenant_id 字段值正确
  • 检查当前登录用户是否属于该租户
  • 超级管理员账号可能不受租户限制

多租户数据隔离失效

排查

  • 检查表是否有 tenant_id 字段
  • 检查实体类是否继承 TenantEntity
  • 检查是否使用 @IgnoreTenant 注解跳过了租户过滤

某些表不需要租户隔离

使用 @IgnoreTenant 注解:

java
@IgnoreTenant
public List<Dict> queryAllDict() {
    return dictMapper.selectList(null);
}

获取帮助

如果以上文档无法解决您的问题:

最后一次更新于: