# 架构说明

## 依赖
* 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打开对于接口文档的访问权限
```

```
