此框架主要针对SpringBoot项目各类功能做出封装,整合各类插件,提供简便快速用法;
已完成功能:
待整合功能
Nacos
easy-es
RabbitMQ
Redis
Debezium
Cancel
请求拦截器
内部过滤器
常用工具类
gateway
auth2
文件上传下载接口封装
hdfs/fastdfs文件存储
本地文件夹监控
文件读取
压缩包读取
数据库配置加密
切面
配置文件读取
日期自动填充
自定义注解转换 0-false
封装读取本地Json配置工具类
首先根据需求编写配置文件目录为(resources/config/Equipment.json)内容如下:
Equipment.json
{
"CT": [
"M4A1-S",
"USP-S",
"Knife",
"FlashBomb"
],
"T": [
"AWP",
"Glock",
"Knife"
]
}
配置读取源码如下:
/**
* @author Ryan
* @date 2022/8/6 16:56
* @description 读取JSON配置文件
*/
@Slf4j
public class JsonConfig {
private static Map<String, List<String>> equipmentMap = new LinkedHashMap<>();
public static void initConfig() {
try {
equipmentMap = JSON.parseObject(new ClassPathResource("/config/Equipment.json").getInputStream(), Map.class);
} catch (IOException e) {
log.error("【配置读取】读取Json配置失败");
e.printStackTrace();
}
log.info("【配置读取】初始化Json配置完成");
}
public static Map<String, List<String>> getEquipmentMap() {
return equipmentMap;
}
}
注意:需要在项目启动时初始化配置读取 initConfig(),代码如下:
/**
* @author Ryan
* @date 2022-07-27
* @description 启动类
*/
@SpringBootApplication
@MapperScan("com.ryan.fw.mapper")
@EsMapperScan("com.ryan.fw.easyes.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
//初始化json数据
JsonConfig.initConfig();
}
}
服务启动请求Swagger接口效果如下:

整简单搭建ElasticSearch + Kibana;
服务采用Docker部署,点击跳转
镜像采用 nshou/elasticsearch-kibana 为ElasticSearch+Kibana合并镜像
镜像拉取:docker pull nshou/elasticsearch-kibana
启动命令:docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana
启动成功后可访问: 127.0.0.1:9200 127.0.0.1:5601 查看状态
查看镜像状态:docker ps 效果如下:

整合Easy-ES操作ElasticSearch;
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发.
依赖如下:
cn.easy-es
easy-es-boot-starter
0.9.80
此案例仅对单个索引进行操作,实体如下:
/**
* @author Ryan
* @date 2022/8/8 9:36
* @description 图书-实体
*/
@TableName("fw_book")
@Data
@ToString
@EqualsAndHashCode(callSuper = true)
@IndexName("fw_book")
public class BookDO extends BaseDO {
@TableId(type = IdType.AUTO)
@IndexId(type = cn.easyes.common.enums.IdType.CUSTOMIZE)
private Long id;
private String name;
private BigDecimal price;
private String author;
private String type;
private String description;
}
使用此框架需配置mapper与mapper扫描,详情代码如下:
注意:此es的mapper要与Mybatis-Plus的mapper区分位置;
/**
* @author Ryan
* @date 2022/8/8 17:33
* @description
*/
@Component
public interface BookEsMapper extends BaseEsMapper<BookDO> {
}
/**
* @author Ryan
* @date 2022-07-27
* @description 启动类
*/
@SpringBootApplication
@MapperScan("com.ryan.fw.mapper")
@EsMapperScan("com.ryan.fw.easyes.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
//初始化json数据
JsonConfig.initConfig();
}
}
针对此实体简单封装各类方法,接口如下:
/**
* @author Ryan
* @date 2022/8/8 17:04
* @description
*/
public interface BookService extends IService<BookDO> {
/**
* 查询单条图书信息
*
* @param id 图书Id
* @return
*/
public BookVO one(Long id);
/**
* 查询全部图书信息
*
* @return
*/
public List<BookVO> getAllBooks();
/**
* 同步全部图书信息至ES
*
* @return
*/
public Boolean syncEsAllBooks();
/**
* 查询全部ES图书信息
*
* @return
*/
public List<BookVO> getAllEsBooks();
/**
* 删除全部ES图书信息
*
* @return
*/
public Boolean deleteAllEsBooks();
/**
* 对比Es与Mysql
*
* @return 响应信息
*/
public Map<String, Object> contrastEsAndDb();
}
具体实现类如下:
/**
* @author Ryan
* @date 2022/8/8 17:06
* @description
*/
@Slf4j
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, BookDO> implements BookService {
@Resource
private BookEsMapper bookEsMapper;
@Override
public BookVO one(Long id) {
BookDO bookDO = this.getById(id);
ObjUtils.checkNull(bookDO, "当前id:" + id + "无法确认图书信息");
return ObjUtils.convert(bookDO, BookVO.class);
}
@Override
public List<BookVO> getAllBooks() {
return ObjUtils.toList(super.list(), BookVO.class);
}
@Override
public Boolean syncEsAllBooks() {
List<BookDO> list = super.list();
if (bookEsMapper.existsIndex("fw_book")) {
for (BookDO bookDO : list) {
BookDO es = bookEsMapper.selectById(bookDO.getId());
if (Objects.nonNull(es)) {
bookEsMapper.updateById(bookDO);
} else {
bookEsMapper.insert(bookDO);
}
}
} else {
list.forEach(item -> bookEsMapper.insert(item));
}
return true;
}
@Override
public List<BookVO> getAllEsBooks() {
try {
List<BookDO> list = bookEsMapper.selectList(new LambdaEsQueryWrapper<>());
return ObjUtils.toList(list, BookVO.class);
} catch (UndeclaredThrowableException e) {
throw new RuntimeException("【索引无效】fw_book不存在");
}
}
@Override
public Boolean deleteAllEsBooks() {
return bookEsMapper.deleteIndex("fw_book");
}
@Override
public Map<String, Object> contrastEsAndDb() {
Map<String, Object> map = new HashMap<>(2);
if (bookEsMapper.existsIndex("fw_book")) {
Integer num = 500;
long start = System.currentTimeMillis();
for (int i = 0; i <= num; i++) {
this.getAllBooks();
}
map.put("DB", "【查询对比】DB查询耗时:" + (System.currentTimeMillis() - start));
for (int i = 0; i <= num; i++) {
this.getAllEsBooks();
}
map.put("ES", "【查询对比】ES查询耗时:" + (System.currentTimeMillis() - start));
}
return map;
}
}
最终Swagger调用接口,结果如下:
数据库查询:
ES查询:
GitHub: https://github.com/fsyxjwxw/SpringBoot-Framework
如有其他想法或想要整合的插件请与本人联系;