### 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(因登錄接口已需要圖片驗證碼驗證,需帶上驗證碼參數,詳見文檔[驗證碼過濾器使用](http://www.hmoore.net/exrick/xboot/1136968)或[Swagger接口文檔統一認證](http://www.hmoore.net/exrick/xboot/1027473)部分)

* 之后的請求中請在header或參數中添加該token即可

### 無狀態風格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`