# 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控制台增加配置文件