# basic-project **Repository Path**: pigletO/basic-project ## Basic Information - **Project Name**: basic-project - **Description**: 脚手架项目,基于springboot2.7.11,java11,底层依赖com.piglet.common库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-11 - **Last Updated**: 2024-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基础脚手架 ## 使用方法✨ > 见doc目录下[INSTRUCTION.md](doc%2FINSTRUCTION.md) ## 项目特色✨ 1. **项目一致性**:确保所有项目都遵循相同的结构、规范和最佳实践,从而提高代码的一致性和可维护性。 2. **快速启动**:快速启动新项目,无需从头开始设置项目结构和配置。 3. **自动化配置**:包括自动化配置和设置工具,以减少手动配置的需要,加快开发速度。 4. **模块化**:支持模块化开发,允许开发团队根据项目需求添加或删除功能模块。 5. **集成工具**:集成各种工具,如构建工具、测试框架、代码风格检查工具等,以简化开发流程。 6. **自定义选项**:支持自定义选项,允许开发团队根据项目的具体需求进行配置。 7. **持续维护**:定期维护和更新脚手架,以适应新技术和最佳实践。 8. **易于使用**:脚手架本身提供完整版(feature/full-version)和纯净版(feature/pure-version)。 ## 项目目录🗂 ``` scaffold_src(所有的子模块名称需要重命名,package路径无需修改) ├── docs # 文档 ├── sql # SQL脚本 ├── hx-model # 实体类 ├── constants # 业务常量 ├── dto # 业务实体,不同层之间数据传递 ├── entity # 数据库字段实体 ├── enums # 枚举 ├── vo # 视图实体,主要用于返回值 ├── hx-service # 业务层 ├── main # 成员开发业务代码位置 ├── configure # 项目个性化的配置文件 ├── consumer # mq消费者代码 ├── controller # controller接口 ├── mapper # mybatis接口文件 ├── service # 业务逻辑代码 ├── task # xxlJob定时任务 ├── utils # 工具类 ├── test # 测试用例 ├── hx-feign # 暴露给它服务的接口,会将model引用进去 ├── main # 成员开发业务代码位置 ├── Config.java # 公共文件,用于定义项目访问域名 ├── api # 定义当前项目中需要暴露给它服务的接口 ├── test # 测试用例 ``` ## 框架版本 1. JDK:11 2. Spring Boot:2.7.11。 Spring Boot 2.7是2.x的最后一个发布版本,该版本的开源将于2023年11月停止支持,商业支持可延长到2025年2月。 Sprint Boot 3.X 要求Java最低版本Java17。 3. maven:maven3.x,maven模型版本4.0.0。 4. druid:1.2.18 (数据库连接池) 5. mysql-connector-java:8.x (支持Mysql8.0) 6. hutool:5.8.22 (工具:只引入core) 7. fastjson:2.0.x (1.x已经停止维护,2.0.x提升安全性,提高性能) ## 特殊类介绍 1. ParamLogAOP:环绕切面,增加入参出参日志。 2. TransactionConfiguration:统一事务处理,按照对应的接口前缀,自动开启事务,无需手动添加注解。 3. feign.Config: 公共配置,用于定义当前服务的访问域名。使服务接入方使用更加便捷。 ## 规范⚠️ 摘自阿里Java开发手册 1. 常量命名应该全部大写,单词间用下划线隔开 2. Service / DAO 层方法命名 1)获取单个对象的方法用 get 做前缀。 2)获取多个对象的方法用 list 做前缀。 3)获取统计值的方法用 count 做前缀。 4)插入的方法用 save做前缀。 5)删除的方法用 remove做前缀。 6)修改的方法用 update 做前缀。 3. 实体类主要使用lombok,使代码更简洁,实测增加getter/setter并不会增加多少代码量 4. ## 注意事项⚠️ 1. pom中已配置默认启动dev配置文件 2. 强制:父POM文件中定义远程仓库地址:1-私服地址,2-阿里云地址。 配置优先级:pom.xml>user settings>global settings 避免每个人本地maven setting文件中的地址不一致。 3. 强制:单体服务只能连接单个数据库 梳理每个数据库应该请求哪个服务 4. 强制:包名com.piglet.[业务名称].common,com.piglet.[业务名称].feign, com.piglet.[业务名称].model。 # hx-common依赖 > > **平滑过渡**:同时提供了针对java8(feature/java8-version)和java11(feature/java11-version)的版本。 > > 1. java8的pom版本依赖 > > ```java > > > 0.0.0-SNAPSHOT > > ``` > > 2. java11的pom版本依赖 > > ```java > > > 0.0.1-SNAPSHOT > > ``` > > ## 项目目录🗂 ``` hx-common ├── common-core # 核心类,仅依赖核心类可以快速构建一个简单项目 ├── common-feign # feign接口jar通用依赖,需要提供外部接口的时候需要引用 ├── common-model # 核心实体 ├── common-mybatis # mybatis能力,引入core默认自带 ├── common-nacos # nacos配置 ├── common-redis ├── common-rocketmq ├── common-web # web核心能力,引入core默认自带 ├── common-xxljob ``` ### 核心类 1. fastjson 2. OkHttp 3. mybatis 4. 持续增加。。。 ### Common-core #### 只包含最基础的依赖内容 引用了了common-web和common-mybatis和common-model #### 通用 ### Common-mybatis #### 特性 - 集成mybatisPlus和分页插件`MybatisPlusConfig` - 新增和修改支持自动填充时间**(仅限`createTime`,`updateTime`)** - 提供了数组类型数据保存的自动转换`ArrayObjectJsonTypeHandler` #### 数据源类型 默认hikari,如需切换,指定`spring.datasource.type`即可 - `hikari` - `druid` #### mapper默认扫描路径 基本覆盖com.piglet开头的多数情况。 `com.piglet.growth` `com.piglet.*.*.mapper` `com.piglet.*.*.*.mapper` #### 示例配置文件 ```yaml # 数据源配置 spring: datasource: driverClassName: username: password: url: mybatis-plus: configuration: # 驼峰下划线转换 map-underscore-to-camel-case: true # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` ### Common-web #### 特性 - 支持全局异常处理 `GlobalExceptionHandler` - 支持全域名跨域 - 支持全局时间输出类型格式转换 - 支持全局时区转换 - 支持feign统一解码,自选开启`FeignDecoderConfig` - 注入了Validator,支持手动参数校验`ValidationConfig` - 使用openFeign作为默认Http调用工具 - 支持了logback配置 - 日志级别开发环境为DEBUG,其他环境为`INFO` - 通过读取spring.application.name配置日志名称 - 日志路径在./logs/${APP_NAME} - 支持输出到控制台和文件 - 文件名称格式为{时间-日志级别-序号.log} - 日志文件保留30天,单个文件20M - dev环境 - 输出到控制台 - test环境 - 输出到控制台 - prod环境 - 输出到控制台和文件 #### 示例配置文件 **项目名称必填**,会影响日志打印文件的文件名称、xxl日志位置、nacso配置名称 ```yaml server: port: 8080 spring: application: name: base-project profiles: active: dev ``` ### Common-redis #### 特性 - 使用jackson的序列化方式`RedisConfig`,序列化方式不可修改。 - 使用Lettuce客户端。`RedisConfig` - 引入redisson客户端。 - 提供redis常用方法工具类RedisComponent。 #### 示例配置文件 ```yaml # 数据源配置 spring: redis: database: 0 password: cluster: nodes: - max-redirects: 2 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 1 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: 2000ms # 分布式锁配置 redisson: address: password: database: 0 min-idle: 1 ``` #### redis客户端调用 ```java @Resource private RedisComponent redisComponent; ``` ### Common-xxl-job #### 提供xxlJob定时任务调度的能力。 示例配置:按需修改`执行器名称`和`xxl服务地址`。 ```yaml # xxl-job配置 xxl: job: admin: addresses: accessToken: executor: # 执行器名称 appname: ${spring.application.name} address: ip: port: 8501 logpath: ./logs/${spring.application.name}/xxl logretentiondays: 7 ``` ### Common-rocketmq #### 特性 - 提供rocketmq常用方法工具类RocketMQComponent - 提供通用消息体`RocketMqMessageBody` 示例配置:按需修改`name-server`。 ```yaml # rocketmq配置 rocketmq: name-server: 10.65.3.38:9876;10.65.3.39:9876;10.65.3.40:9876 # name-server: 127.0.0.1:9876 producer: group: ${spring.application.name}ProducerGroup ``` #### rocketMq调用 ```java @Resource private RocketMQComponent rocketMQComponent; ``` ### elasticserach > 该模块未添加统一模块依赖,走es-proxy的代理服务 #### pom文件添加依赖 ```java com.piglet es-proxy-feign 1.0.0 ``` ```java @Resource private EsProxyFeignService esProxyFeignService; @GetMapping("esTest") public ResponseResult esTest() { JLQueryCommonDTO queryRequest = new JLQueryCommonDTO(); queryRequest.setIndex(Constant.ESIndex.COMMENT_INFO_INDEX); queryRequest.setPageSize(10); queryRequest.setPageNum(1); return ResponseResult.ok(esProxyFeignService.commonListEs(queryRequest).getData()); } ``` ### Common-nacos springboot2.6以上版本使用以下接入方式 #### 第一步:修改配置文件 application-dev.yaml: ```yaml spring: cloud: nacos: config: namespace: file-extension: yaml server-addr: config: import: - nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} ``` application-prod.yaml: ```yaml spring: cloud: nacos: config: # 命名空间id namespace: # 配置文件后缀 file-extension: yaml # nacos服务地址 server-addr: config: import: - nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} ``` #### 第二步:修改pom文件 Java11: ```pom 0.0.1-SNAPSHOT com.piglet.growth common-nacos ${common.version} ``` java8: ```pom 0.0.0-SNAPSHOT com.piglet.growth common-nacos ${common.version} ``` #### 第三步:登陆nacos控制台增加配置文件