1. 创建一个配置文件
@Configuration public class TenantFeignConfig { @Bean public RequestInterceptor tenantIdInterceptor() { return template -> { // 从当前线程上下文获取租户ID(需自行实现租户上下文管理) String tenantId = AuthUtil.getTenantId(); if (Func.isNotBlank(tenantId)) { template.header("Blade-TenantId", tenantId); } }; } }
2. Feign Client 接口引入配置文件
@FeignClient(
value = BaseAppConstant.APPLICATION_BASE_NAME,
fallback = IBaseChannelClientFallback.class,
configuration = TenantFeignConfig.class
)
public interface IBaseChannelClient {
3. Client 实现类
@RestController @RequiredArgsConstructor public class BaseChannelClient implements IBaseChannelClient { private final IBaseChannelService baseChannelService; private final BladeContext bladeContext; @Override public RgetChannel(Long id) { String tenantId = bladeContext.getTenantId(); // 获取租户Id try { DynamicDataSourceContextHolder.push(tenantId); // 切换数据源(如不需要可以去掉 try{...}finally{...} ) return R.data( TenantUtil.use(tenantId, () -> baseChannelService.getById(id)) // 线程注入租户Id ); } finally { DynamicDataSourceContextHolder.poll(); } } }
希望官方可以封装上述功能到tool中
扫一扫访问 Blade技术社区 移动端