### Lombok插件安装
* 项目使用[Lombok](https://projectlombok.org/)插件简化开发,请自行在编译器中安装,不安装会报错但不影响运行,常用注解说明:
* `@Data`:自动生成get、set等方法
* `@Slf4j`:日志打印可直接使用`log.info()`等
### 配置文件加密
* 配置文件可使用Jasypt加密,可到`cn.exrick.xboot.common`包中找到 JasyptUtil 工具类生成加解密结果,当检测到格式为`ENC(xxx)`时会自动解密,当然也可直接明文(生产环境中可通过环境变量、命令行等形式进行设置)
~~~
# 配置文件加密key 生产环境中可通过环境变量、命令行等形式进行设置
jasypt:
encryptor:
password: xboot
spring:
# 数据源
datasource:
# Jasypt加密 可到common-utils中找到JasyptUtil加解密工具类生成加密结果 格式为ENC(加密结果)
password: ENC(F4B0s6u9xcDw3V+P0qC4CA==)
~~~
### 启用Elasticsearch与配置日志记录位置
* 启用Elasticsearch,操作日志使用ES或数据库记录配置
~~~
spring:
# Elasticsearch
data:
elasticsearch:
# 暂未使用ES 关闭其持久化存储
repositories:
enabled: true
xboot:
# 日志记录方式 true使用Elasticsearch记录(需启动并配置ES) false记录至数据库中(默认)
logRecord:
es: false
~~~
### 操作日志注解使用
* 日志注解使用`@SystemLog(description="操作日志名称", type=日志类型)`
* 日志类型type默认为OPERATION操作日志 当然你可以自定义
### 接口相关
* 为方便前台配置代理,所有接口建议以统一路径例如“/xboot”开头
* 登录成功后前台请在返回的`result`字段中保存token(因登录接口已需要图片验证码验证,需带上验证码参数,详见文档[验证码过滤器使用](https://www.kancloud.cn/exrick/xboot/1136968)或[Swagger接口文档统一认证](https://www.kancloud.cn/exrick/xboot/1027473)部分)
![](https://i.loli.net/2019/02/04/5c581d77f2cfc.png)
* 之后的请求中请在header或参数中添加该token即可
![](https://i.loli.net/2019/02/04/5c581d78061b4.png)
### 无状态风格Token令牌交互相关配置
~~~
xboot:
token:
# 设置为true后,token将存入redis,并具有单点登录功能 默认false使用JWT交互
redis: true
# 是否开启单设备登陆 仅当token交互方式为redis时生效(默认60分钟内无请求自动失效,下方可配置)
sdl: true
# token中存储用户权限数据 设为true开启后可避免每次请求再获取用户权限,但有可能导致编辑权限菜单后无法读取到最新权限数据(需用户重新登录)
storePerms: true
# token过期时间(分钟)
tokenExpireTime: 60
# 用户选择保存登录状态对应token过期时间(天)
saveLoginTime: 7
# 限制用户登陆错误次数(次)
loginTimeLimit: 10
# 错误超过次数后多少分钟后才能继续登录(分钟)
loginAfterTime: 10
~~~
### 无需认证接口配置
* 忽略鉴权url配置(不需要登录认证 开放的接口 支持通配符)
~~~
# 忽略鉴权url
ignored:
urls:
- /xboot/user/regist
~~~
### 限流配置
* 分布式限流(基于Redis令牌桶算法)
* 全局限流
~~~
xboot:
# 全局限流
ratelimit:
enable: true
# 每1秒内
timeout: 1000
# 总限制100个请求
limit: 100
# IP限流
iplimit:
enable: true
# 每1秒内
timeout: 1000
# 每个ip限制15个请求
limit: 15
~~~
* 指定方法限流注解
~~~
@RateLimiter(limit = 1, timeout = 5000)
~~~
* 支持多维度IP、uid等限流 详见代码
### 同步锁使用
* 分布式同步锁(基于Redis)
~~~
@Autowired
private RedisDistributedLockTemplate lockTemplate;
lockTemplate.execute("订单流水号", 5000, new Callback() {
@Override
public Object onGetLock() throws InterruptedException {
//TODO 获得锁后要做的事
log.info("生成订单流水号");
return null;
}
@Override
public Object onTimeout() throws InterruptedException {
//TODO 获得锁超时后要做的事
return null;
}
});
~~~
### 后端代码生成
* 后端代码生成方法在`cn.exrick.xboot.generator`包中的`XbootGenerator.java`或`XbootMPGenerator.java`工具类,支持JPA或Mybatis-Plus代码生成,修改好生成类配置后运行主函数main方法即可生成三层相关代码,别忘了在实体类中添加相关字段,运行项目后将自动生成数据库表,详见代码生成文档
### Spring缓存注解
~~~
```java
@CacheConfig(cacheNames = "user")
public interface UserService extends XbootBaseService<User,String> {
@Cacheable(key = "#username")
User findByUsername(String username);
}
```
~~~
* 删除刷新注解`@CacheEvict(key = "#u.username")`手动删除刷新缓存时注意key为:`user::username`
### Quartz定时任务使用
* 在`cn.exrick.xboot.quartz.jobs`包下写好好你的定时任务类,参考代码中已有2个定时任务Job示例
* 启动应用在后台页面“定时任务”菜单添加配置你写的的定时任务类保存成功后将开始执行
### Spring Security官方推荐权限管理:`@PreAuthorize("hasRole('ADMIN')")`
### Spring自带定时:`@Scheduled(cron="cron表达式")`
### Spring异步:`@Async`