# es-init **Repository Path**: yongshi2/es-init ## Basic Information - **Project Name**: es-init - **Description**: es初始化 用来创建索引和模板 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-10 - **Last Updated**: 2024-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 易管架构介绍 ![CircleCI](https://circleci.com/gh/alibaba/spring-cloud-alibaba/tree/2022.x.svg?style=svg) ![SpringBootVersion](https://img.shields.io/badge/Spring%20Boot-2.3.4.RELEASE-blue) ![SpringCloudVersion](https://img.shields.io/badge/Spring%20Cloud-2.2.3.RELEASE-blue) ![gateway](https://img.shields.io/badge/kong网关-blue) ![flyway](https://img.shields.io/badge/flyway-6.4.4-pink) 易管微服务致力于统一相关技术栈,统一相关代码风格,使开发者更加专注于自己的业务,从而提高开发和维护 效率,使用统一封装的ehl-web-starter ![](https://img.shields.io/badge/核心-red) 来完成版本的规范 技术栈的统一,通用日志的接入,kneif4j文档的接入,统一的鉴权续约 异常处理,以及接口返回实体的统一定义等等。 ### 主要功能 * **完成统一的注册中心和配置中心的选用(nacos)** * **完成统一的工具类json工具类 日期工具类 excel工具类(ehl-utils)** * **全局异常处理不需要在controller层写相应的try catch语句** * **统一的登录续约 利用和公司统一门户的对接 完成统一的登录续约功能并提供通用的工具方法获取当前的登录人信息** * **提供统一的数据库版本管理规范(flyway)** * **提供了统一的链路追踪集成(zipkin)** * **提供了统一的缓存层异常处理如:redis环境异常的缓存侧处理** * **自定义的业务异常 和自定义的断言** ### 核心依赖的介绍 #### ehl-web-starter 包含了依赖 ehl-utils,ehl-log ehl-utils 并封装了跟业务相关的统一的登录鉴权 与 feign 的用户信息传递 以及zipkin 链路追踪 可以查看 [spring-cloud-test](./spring-cloud-test) * pom的使用 ```xml com.ehl.utb ehl-web-starter ``` * 启动类上添加 ```java @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @EnableEhlWebServiceBoot @EnableCaching @EnableFeignClients(basePackages = "com.ehl") @RefreshScope public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } } ``` * 开启登录配置: ```yaml ## UC 相关的信息 uc: login: # 是否开启登陆 false 为不开启 true为开启 open: false # UC中注册的这个应用的appkey app-key: S-00022 # UC微服务的地址前缀 uc-service-url: http://172.38.90.105:8087/userservice ``` * 因为默认集成了nacos 所以 ```yaml spring: # 注册中心consul的配置信息 cloud: nacos: username: nacos password: nacos server-addr: 172.38.40.137:8848 file-extension: yaml discovery: # namespace: public config: namespace: 7c209979-38f5-4b37-9c23-6f6878f3c88d file-extension: yaml shared-configs: - data-id: dispatch-redis.yaml namespace: 7c209979-38f5-4b37-9c23-6f6878f3c88d fileExtension: yaml refreshEnabled: true refreshEnabled: true ``` #### ehl-utils 模块的介绍 ![](https://img.shields.io/badge/优先使用工具类中的方法-red) ![](./pic/工具类介绍.png) - 包含excel 工具类提供实体和excel之间的相互转换 - ConvertUtil 为各种基础类型直接的转换 如com.ehl.utb.common.utils.ConvertUtil.toStr(java.lang.Object, java.lang.String) - CoordinateUtil 为各种坐标系之间的转换 - DateUtils 为时间日期的工具类 - HttpUtil 提供基础的http get post等调用 - IdUtils 提供生成id的工具类 - JsonUtils json处理相关的工具类 - ImageUtils 提供图片的合并 - ThreadPoolUtil 提供线程池生成的工具类 ##### 简单例子 * json 工具类转json ````java WebSocketMessage webSocketMessage = new WebSocketMessage(); webSocketMessage.setWebSocketMessageType(WebSocketMessageType.USERINFO); WebSocketUserInfo userInfo=new WebSocketUserInfo(); userInfo.setUserId("0001"); userInfo.setUserName("admin"); userInfo.setDeptId("0001"); JsonUtils.toJson(userInfo); ```` * json 工具类 json转对象 ````java String jsonStr="{\"userId\":\"0001\",\"userName\":\"测试\",\"info\":\"测试\"}"; UserInfo userInfo = JsonUtils.toObject(jsonStr, UserInfo.class); ```` * json 工具类中转list之类的对象 ````java List efficiencyDTOList = JsonUtils.toObject(JsonUtils.toJson(obj), new TypeReference>() { }); ```` * 日期时间的使用 ```java DateUtils.toDateStr(new Date(), "yyyyMMddHHmmssSSS"); DateUtils.getDateTimeStr(new Date()) DateUtils.parseTime(DateUtils.toDateStr(new Date(), DateUtils.LONG_DATE_FORMAT_ZERO) ``` #### ehl-log * 使用方式:在方法加加上相应的注解 ```java @Log(type = LogOpType.LOGIN, module = TestSystemModule.class, operaModule = "?[name() == 'DICT']", desc = "测试") @ApiOperation(value = "测试根据注解来写日志", httpMethod = "GET") @GetMapping("/testWriteLog") public Result testWriteLog() { return Result.getSuccessResult("成功"); } ``` * ehl-web-starter 将自动引入 ehl-log * 日志操作模块的解析配置 --参考 spring-cloud-test ```java @Bean public LogOptTypeResolver getLogOptTypeResolver() { return new LogOptTypeResolver(OperaModuleType.class); } ``` * 日志写入配置 目前只支持file 和uc ```yaml #日志相关的写入 其中uc日志写入必须在开启登录时才能正常写入 ehl: log: writeType: file,uc ``` ### 如何使用 任何一个产品都不是单一个服务能完成所有功能的,或者说当前是单一的服务,后续随着业务的变化他可能 增加新的服务去完成特定的功能,即所有的产品都可能存在多个服务,那么我们将每个产品都任为是他是一个单项目 多模块的服务 前端也可以作为一个模块 所以我们需要仿照这个目录结构创建自己的工程,其中移除这个spring-cloud-test 和spring-boot-test 而根据 自己的需要创建自己的模块 #### 1.需要创建各自产品自己的global-resouce并引用以便集中统一的提交数据库脚本以及生成自己的mybaits文件** ##### flyway 目录规范 * 统一在global-resource 中管理sql的脚本 不同的系统用不同的版本的表名 和资源路径 * [global-resource](./global-resources) * 注意:oracle时需要将第一个脚本设置为空 [base](./global-resources/src/main/resources/sql/test/margin/V-1.0.0__%5Btest%5Dbase_line.sql)
系统名称表名资源路径
系统管理flyway_history_system./global-resources/src/main/resources/sql/system/margin
* 配置说明 ```yaml spring: flyway: enabled: true # 合并策略 migration-strategy: # 服务启动时 自动合并开发还是关闭 建议dev 设置为true 现场设置为false auto: true # 脚本文件所处的位置 [ProxyServlet.class](..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F%B9%A4%BE%DF%2F%BC%BC%CA%F5%D6%A7%B3%D6%D3%C3%2Ftomcat%2Bjdk%2Fapache-tomcat-8.5.32-windows-x64%2Fapache-tomcat-8.5.32%2Fwebapps%2Fdraw%2FWEB-INF%2Fclasses%2Fcom%2Fmxgraph%2Fonline%2FProxyServlet.class) locations: classpath*:/sql/test/margin/**/*.sql # 记录版本所用的表名 不同的服务使用不同的表名 table: flyway_schema_history[ProxyServlet.class](..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F%B9%A4%BE%DF%2F%BC%BC%CA%F5%D6%A7%B3%D6%D3%C3%2Ftomcat%2Bjdk%2Fapache-tomcat-8.5.32-windows-x64%2Fapache-tomcat-8.5.32%2Fwebapps%2Fdraw%2FWEB-INF%2Fclasses%2Fcom%2Fmxgraph%2Fonline%2FProxyServlet.class) # 使用sql合并所用的前缀 sql-migration-prefix: V- # 合并时是否验证所有的脚本文件 validate-on-migrate: false # flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。 clean-disabled: true # 设置为 true 后 flyway 将在需要 baseline 的时候, 自动执行一次 baseline。 baseline-on-migrate: true ``` ####使用统一的返回实体类 ````java com.ehl.utb.web.boot.dto.Result public Result select() { List userInfos = userInfoMapper.selectList(new QueryWrapper<>()); return Result.getSuccessResult(true); } ```` #### 异常处理 * **本项目已经做了全局异常处理(com.ehl.utb.web.boot.exception.GlobalExceptionHandler) 不需要额外的try catch 语句** * **需要将异常信息返回前端的话 使用自定义的 com.ehl.utb.web.boot.exception.EhlBusinessException 类** * **断言使用 如果需要将断言信息返回给前端 可以使用 com.ehl.utb.web.boot.exception.EhlAssert 类** #### 获取用户信息 * 可以使用 com.ehl.utb.ehl.stater.utils.ServletUtils#getLoginUserInfo 接口来获取用户信息 * 可以使用 com.ehl.utb.ehl.stater.utils.ServletUtils#getToken 接口获取token 供系统调用其它uc接口使用 ### 整体架构说明 ![架构设计](./pic/架构设计.png) ### 环境信息 #### 打包命令 ```java mvn clean package -pl spring-cloud-test -am -P dev ``` #### 公共组件的地址 * **地址:https://docs.qq.com/sheet/DQldjelJ4REpuSk5z?tab=dfelmb&_t=1708935581213** # demo 介绍 ## 模块说明 ### spring-cloud-demo 如何快速的搭建一个spring-cloud应用 因为对其中技术栈有具体要求 请仔细查看该工程 ### spring-boot-demo 如果按照公司的技术栈 快速的开发一个spring-boot 应用