微服务版和单体版区别
lamp-boot 基于SpringBoot进行开发,lamp-cloud 基于SpringCloud。2者功能完全上一样,功能代码基本一致,仅有几个差别
lamp-boot 没有网关,网关即lamp-gateway-server,在lamp-cloud网关的几个过滤器在lamp-boot中采用拦截器实现相同的功能。即AuthenticationFilter、TokenContextFilter 实现方式不一样,但实现效果一致。
lamp-boot只有一个lamp-boot-server模块,用于存放配置文件、启动类、配置类等。而lamp-cloud每个服务都有一个server模块,存放各个服务自己的配置文件和启动类。
暴露给前端的接口有区别,由于lamp-cloud项目有网关,所以暴露给前端的接口多了前缀
/api/base
或者/api/system
,为了使同一套前端项目无缝适配2套后端项目,所以前端代码的请求地址全部使用了lamp-cloud项目暴露出来的地址, 在使用lamp-boot时, 需要在前端代理或者nginx中增加uri的代理重写地址。用户分页查询接口:
lamp-boot: POST /user/page
lamp-cloud: POST /api/base/user/page
消息分页查询接口:
lamp-boot: POST /msg/page
lamp-cloud: POST /api/base/msg/page
EchoApi 类中所有的feign改成Impl
public interface EchoApi { // @lamp.generator auto insert EchoApi /** * lamp-cloud 数据字典项 feign查询类 全类名 */ String DICTIONARY_ITEM_FEIGN_CLASS = "top.tangyh.lamp.common.api.DictApi"; }
public interface EchoApi { // @lamp.generator auto insert EchoApi /** * lamp-boot 数据字典项 Serivce名称 */ String DICTIONARY_ITEM_FEIGN_CLASS = "dictServiceImpl"; }
lamp-boot-server模块 application.yml = lamp-cloud的 nacos 中所有配置合并
lamp-boot-server = lamp-system-server + lamp-oauth-server + lamp-base-server + lamp-generator-server合并
uri权限校验时,判断的uri地址不同: ResourceBiz#checkUri
/** * 检查指定接口是否有访问权限 * * @param path 请求路径 * @param method 请求方法 * @return 是否有权限 */ public Boolean checkUri(String path, String method) { // 中间代码省略... return apiList.parallelStream().distinct().anyMatch(item -> { String uri = item.getUri(); boolean matchUri = PATH_MATCHER.match(StrUtil.trim(uri), StrUtil.trim(path)); log.info("path={}, uri={}, matchUri={}, method={} apiId={}", path, uri, matchUri, item.getRequestMethod(), item.getId()); if (HttpMethod.ALL.name().equalsIgnoreCase(item.getRequestMethod())) { return matchUri; } return matchUri && StrUtil.equalsIgnoreCase(method, item.getRequestMethod()); }); }
/** * 检查指定接口是否有访问权限 * * @param path 请求路径 * @param method 请求方法 * @return 是否有权限 */ public Boolean checkUri(String path, String method) { // 中间代码省略... return apiList.parallelStream().distinct().anyMatch(item -> { String uri = item.getUri(); /* * 若您确定只使用lamp-boot,而非lamp-cloud,请将def_resource_api表中uri的代理的前缀(/base、/system、/oauth)去除,即可 删除删除删除 if里面的代码! * 因为脚本数据是基于lamp-cloud配置的,所以uri地址会多一段gateway代理前缀。如 * lamp-cloud 中地址为:/base/baseEmployee/page * 对应lamp-boot的地址为:/baseEmployee/page * 其中/base是因为使用了gateway增加的! */ if (!StrUtil.startWithAny(uri, "/gateway")) { uri = StrUtil.subSuf(uri, StrUtil.indexOf(uri, '/', 1)); } boolean matchUri = PATH_MATCHER.match(StrUtil.trim(uri), StrUtil.trim(path)); log.info("path={}, uri={}, matchUri={}, method={} apiId={}", path, uri, matchUri, item.getRequestMethod(), item.getId()); if (HttpMethod.ALL.name().equalsIgnoreCase(item.getRequestMethod())) { return matchUri; } return matchUri && StrUtil.equalsIgnoreCase(method, item.getRequestMethod()); }); }
新建租户时,初始化lamp_base库表结构的脚本存放路径不同。boot位于 lamp-boot-server/src/main/resources/ ,cloud位于 lamp-system-server/src/main/resources/
仅DATASOURCE模式项目有脚本,COLUMN和NONE模式没有脚本。
租户管理初始化数据源实现不同: GeneratorController
// lamp-cloud 项目GeneratorController位于lamp-gateway-server @ResponseBody @ApiOperation(value = "查询在线服务的前缀") @GetMapping("/gateway/findOnlineServicePrefix") public R<Map<String, String>> findOnlineServicePrefix() { List<String> services = discoveryClient.getServices(); Map<String, String> map = MapUtil.newHashMap(); services.forEach(service -> gatewayProperties.getRoutes().forEach(route -> { if (StrUtil.equalsIgnoreCase(service, route.getUri().getHost())) { if (CollUtil.isEmpty(route.getPredicates())) { return; } PredicateDefinition predicateDefinition = route.getPredicates().get(0); predicateDefinition.getArgs().forEach((k, v) -> { map.put(service, StrUtil.subBetween(v, "/", "/**")); }); } }) ); return R.success(map); }
// lamp-boot 项目GeneratorController位于lamp-boot-server @ResponseBody @ApiOperation(value = "查询在线服务的前缀") @GetMapping("/gateway/findOnlineServicePrefix") public R<Map<String, String>> findOnlineServicePrefix() { Map<String, String> map = MapUtil.newHashMap(); map.put(application, "base"); return R.success(map); }
代码生成器生成代码需要的模板文件存放位置不同
CaptchaServiceImpl 中 使用 MsgApi 换成 MsgBiz
❗️❗️❗️若评论区无法显示,请使用"手机热点"或"科学上网"。