package org.jeecg.modules.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.base.BaseMap; import org.jeecg.common.constant.CacheConstant; import org.jeecg.common.constant.GlobalConstants; import org.jeecg.modules.system.entity.SysGatewayRoute; import org.jeecg.modules.system.mapper.SysGatewayRouteMapper; import org.jeecg.modules.system.service.ISysGatewayRouteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @Description: gateway路由管理 * @Author: jeecg-boot * @Date: 2020-05-26 * @Version: V1.0 */ @Service @Slf4j public class SysGatewayRouteServiceImpl extends ServiceImpl implements ISysGatewayRouteService { @Autowired private RedisTemplate redisTemplate; @Override public void addRoute2Redis(String key) { List ls = this.list(new LambdaQueryWrapper()); redisTemplate.opsForValue().set(key, JSON.toJSONString(ls)); } @Override public void deleteById(String id) { this.removeById(id); this.resreshRouter(); } @Override @Transactional(rollbackFor = Exception.class) public void updateAll(JSONObject json) { log.info("--gateway 路由配置修改--"); try { json = json.getJSONObject("router"); String id = json.getString("id"); SysGatewayRoute route = getById(id); if (ObjectUtil.isEmpty(route)) { route = new SysGatewayRoute(); } route.setRouterId(json.getString("routerId")); route.setName(json.getString("name")); route.setPredicates(json.getString("predicates")); String filters = json.getString("filters"); if (ObjectUtil.isEmpty(filters)) { filters = "[]"; } route.setFilters(filters); route.setUri(json.getString("uri")); if (json.get("status") == null) { route.setStatus(1); } else { route.setStatus(json.getInteger("status")); } this.saveOrUpdate(route); resreshRouter(); } catch (Exception e) { log.error("路由配置解析失败", e); resreshRouter(); e.printStackTrace(); } } /** * 更新redis路由缓存 */ private void resreshRouter() { //更新redis路由缓存 addRoute2Redis(CacheConstant.GATEWAY_ROUTES); BaseMap params = new BaseMap(); params.put(GlobalConstants.HANDLER_NAME, "loderRouderHandler"); //刷新网关 redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params); } @Override public void clearRedis() { redisTemplate.opsForValue().set(CacheConstant.GATEWAY_ROUTES, null); } }