# ant-boot
**Repository Path**: mirrors_gspandy/ant-boot
## Basic Information
- **Project Name**: ant-boot
- **Description**: 本框架继承spring-boot,对部分原生能力进行增强,集成spring-boot未集成的第三方工具:配置中心、分布式id生成器、dubbo等
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2025-10-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ant-boot框架
1. 简介
> spring-boot带来的高效、便捷,让越来越多的公司采用它作为自己的应用框架。spring-boot官方集成了一些常用的第三方工具,但也不是所有都集成(比如dubbo),对于大型互联网公司很重要的配置中心、应用id这些方案也未直接提供(众口难调,spring-boot也不可能面面俱到)。但是spring-boot提供强大的扩展能力,根据这些能力可以集成spring-boot未集成的第三方工具。但是如果每个系统都自己去集成一遍这些第三方工具,显然是没有必要的。为此本框架继承spring-boot,集成一些常用的工具,并根据具体情况对spring-boot原有的功能进行一些增强。
2. 环境要求:
> * jdk1.8
> 注意:本框架已经上传到[maven中央库](http://search.maven.org/#search%7Cga%7C1%7Corg.antframework.boot)
## 1. 核心
使用ant-boot时,启动类需使用@AntBootApplication(继承自@SpringBootApplication),并设置appId(应用id)。在大型互联网公司中系统会有很多,每个系统需要唯一的id用于区分。[参考](https://github.com/zhongxunking/configcenter/blob/master/configcenter-assemble/src/main/java/org/antframework/configcenter/Main.java)
ant-boot会在启动时给应用创建3个目录,分别是存放配置文件的目录、存放应用自己生成的数据文件目录、存放日志文件的目录,这3个目录可通过静态类Apps获取。这三个目录默认是/var/apps/config/${appId}、/var/apps/data/${appId}、/var/apps/log/${appId}。默认的目录可能不满足你的需求,可以分别通过设置以下系统属性自定义这3个目录:app.config-path、app.data-path、app.log-path。请保证应用有权限创建这三个目录。
ant-boot会在启动时校验当前jdk版本,如果小于jdk1.8,则会报错,让启动失败;同时如果未设置活动profile(当前环境),也会启动失败。启动阶段会将Spring容器、environment设置到静态类Contexts中,应用如果需要,可以从中获取。
我们在使用spring-boot时自己的会继承spring-boot-starter-parent,相应的使用ant-boot时自己的pom需要继承ant-boot-starter-parent:[参考](https://github.com/zhongxunking/configcenter/blob/master/pom.xml)
```
org.antframework.boot
ant-boot-starter-parent
1.2.1.RELEASE
```
## 2. 日志
spring-boot原生的日志系统用于线上环境是存在问题的。一是单个日志文件容量太小,只有10MB;二是日志文件滚动策略未加入日期格式,以后查找不方便。为此对日志系统进行了扩展。
引入依赖:
```
org.antframework.boot
ant-boot-starter-log
```
ant-boot会默认的打印控制台、info级别日志文件、error级别日志文件。单个日志文件默认大小是1GB,滚动策略加入了日期,方便以后查找。如果默认配置不满足你的需求(比如想要自己控制日志格式、以及其他详细配置),可以在配置文件(application.properties或application-xxx.properties)通过以“ant.logging.”开头的属性进行配置。spring-boot原生的以下日志配置不再生效:logging.pattern.console、logging.pattern.file、logging.pattern.level、logging.file、logging.path,其他日志配置依旧生效(比如logging.level)。
本日志系统提供良好的扩展性,自己实现LogInitializer接口,并将实现类配置到文件META-INF/spring.factories内,即可实现自己初始化日志。具体实现时可参考[InfoFileLogInitializer](https://github.com/zhongxunking/ant-boot/blob/master/ant-boot-starters/ant-boot-starter-log/src/main/java/org/antframework/boot/log/initializer/InfoFileLogInitializer.java)、[spring.factories](https://github.com/zhongxunking/ant-boot/blob/master/ant-boot-starters/ant-boot-starter-log/src/main/resources/META-INF/spring.factories)
## 3. 配置中心
spring-boot没有提供配置中心解决方案,而配置中心对于大型互联网公司又是很重要的,它管理不同应用在不同环境中繁杂的配置。对此ant-boot自己集成配置中心——开源项目[configcenter](https://github.com/zhongxunking/configcenter)。请先按照configcenter的文档将它部署好。
引入依赖:
```
org.antframework.boot
ant-boot-starter-config
```
ant-boot会在刚启动时就将配置中心中的配置加入到spring的environment中,这样使用配置中心中的配置就跟使用spring-boot的配置文件一样,可以通过@Value等方式获取。需要注意的是配置中心的配置优先级是最低的。
## 4. 分布式id生成器
生成全局唯一的id(流水号),是很多公司都需要解决的问题。如果还是采用时间戳+随机数形式生成,在并发量大时,很有可能会生成重复的id。重复id的危害就是会导致一系列问题,比如幂等性。对此ant-boot集成分布式id生成器——开源项目[ids](https://github.com/zhongxunking/ids)。请先按照ids的文档将它部署好。
引入依赖:
```
org.antframework.boot
ant-boot-starter-ids
```
创建管局唯一id:
```
String id1 = UID.newId();
String id2 = UID.newId();
```
## 5. jpa
spring-boot原生集成的jpa大部分情况已经很好用了,但是对于简单的分页查询还是需要自己组装Specification,比较麻烦。所以本框架对分页查询功能进行增强,对于简单分页查询不用在需要自己组装Specification。
引入依赖:
```
org.antframework.boot
ant-boot-starter-jpa
```
分页查询是采用[SpecificationUtils](https://github.com/zhongxunking/ant-boot/blob/master/ant-boot-starters/ant-boot-starter-jpa/src/main/java/org/antframework/boot/jpa/QueryRepository.java)定义的语法进行查询,很方便。具体使用时可参考:https://github.com/zhongxunking/configcenter/blob/master/configcenter-biz/src/main/java/org/antframework/configcenter/biz/service/QueryPropertyValueService.java
## 6. 集成bekit
[bekit](https://github.com/zhongxunking/bekit)是一个很好用的业务框架,里面包含事件总线、流程引擎、服务引擎。同时ant-boot借助bekit的服务引擎提供了一套[服务调用契约](https://github.com/zhongxunking/ant-common-util#3-服务调用契约),来规范服务调用。
引入依赖:
```
org.antframework.boot
ant-boot-starter-bekit
```
具体使用可参考:https://github.com/zhongxunking/configcenter/blob/master/configcenter-biz/src/main/java/org/antframework/configcenter/biz/provider/AppManageServiceProvider.java
## 7. 集成redis
spring-boot原生的集成redis缺少命名空间功能,由于在大型互联网公司不同应用很有可能使用到相同缓存的key,进而导致缓存冲突。所以本框架对redis增加命名空间功能:从spring容器获取到的RedisTemplate和StringRedisTemplate增加命名空间。如果不想要前缀,可以自己创建RedisTemplate,而不是从spring容器获取,怎么创建RedisTemplate可以参考:org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.RedisConfiguration。
引入依赖:
```
org.antframework.boot
ant-boot-starter-redis
```
自动应用的key格式
1. 直接使用spring容器获取到的RedisTemplate缓存key格式:
${appId}:你自己定义的key
2. redis注解式缓存(@Cacheable),缓存key格式:
${cacheName}:${appId}:你自己定义的key
当spring的Cache注解的实现是Redis时,本框架提供以“ant.cache.redis.”开头的配置进行配置缓存失效时间。
## 8. 集成dubbo
dubbo是很好用的rpc框架,本框架提供集成dubbo。
引入依赖:
```
org.antframework.boot
ant-boot-starter-dubbo
```
说明:
1. 通过以“dubbo.”开头的配置对dubbo进行配置。
2. 使用dubbo提供的注解@Service暴露服务,使用注解@Reference引用服务。
3. 本框架提供dubbo服务引用工厂类(DubboReferenceFactory),对于需要在执行阶段才能确定需要执行的dubbo服务这种情况(比如异步通知),可以通过它动态的引用dubbo服务。该工厂类已配置到spring容器,使用时直接从spring容器获取即可。
---------------------------------------后续计划---------------------------------------
1. 开发对应用透明的分库分表方案
2. 开发对应用透明化的监控
3. ...