# 架构说明

## 依赖
* Gradle
* SpringBoot
* Mybatis
* Shiro
* Druid

## 模块划分
* Root: 根项目用户管理依赖关系,包括:SpringBoot,以及资源打包,各模块之间的依赖设置
* tools: 工具类库,提供无业务逻辑的工具,包括:mybatis-example,shiro-redis,以及各类第三方服务
* data: 数据管理类库,主要提供mybatis,mybatis-generator,flyway的配置管理
* xxx-api: api提供应用,提供SpringBoot的Application的启动支持

## 配置管理
* xx-api需设定可支持的配置文件
```
spring:
  profiles:
    active: runtime, tools, data
```
    * runtime: 可根据运行环境加载对应的配置文件,通过profile中进行不同环境的配置管理
    * tools,data: 对应自模块的配置信息
* 支持各个模块建立独立的配置文件

## 缓存
* 通过Redis+Ehcache实现不同需求的缓存
```
@Cacheable(cacheNames="redis-SSAccountInfo", key="'SSAccountInfo_' + #root.args[0].accountId", unless="#result==null")
@Cacheable(cacheNames="SSAccountInfo",  key="'SSAccountInfo_' + #root.args[0].accountId", unless="#result==null")
```
* 通过前缀进行划分

## 数据库管理
* 通过Flyway进行版本管理
* 配置在data模块中
* 版本sql存放在resources/db/migration中
* 通过Mybatis-generator生成所需的Dao、Mapping、Entity、Example
* tools模块中包含通用Example
* 建议通过Service提供数据支持(tools中提供Service类库用于继承),避免在generator的文件中变更

## Api支持
* 通过Swagger生成所有api文档用于对接
* 使用注解的方式在controller中说明接口信息
* shiro打开对于接口文档的访问权限
```

```