
2019年4月3日
此問題是由于升級(jí) macos sonoma 14.2.1 引起的
解決辦法,重新安裝xcode
rm -rf /Library/Developer/CommandLineTools
xcode-select --install
# Springboot
整合activiti
源代碼:
https://gitee.com/yifan88899/acttest
## 版本說明
- springboot 2.4.2
- activiti 7.1.0.M6
- mysql 8.0.28
## 插件安裝
- Activiti BPMN visualizer
## Bpmn
流程圖位置
- 流程圖xml
和png
需放在resources/processes
下
## Test
- Test Case
都可執(zhí)行,包括:
- 流程查詢
- 流程部署
- 流程啟動(dòng)
- 流程拾取、完成操作
## Mysql
- 需要啟動(dòng)Mysql8
- 數(shù)據(jù)庫名Activiti7
- activiti
會(huì)版建表
1、打開my.cnf 加入 skip-grant-tables2、mysql.service stop && mysql.service start
3、清空root密碼 并 退出
update mysql.user set authentication_string='' where user='root';
4、mysql.service stop && mysql.service start
5、mysql -root 免密登錄并修改root密碼
alter user 'root'@
'%' identified
by 'pass$123';
alter user 'root'@
'localhost' identified
by 'pass$123';
確定是否支持遠(yuǎn)程登錄,host中有%的記錄即支持
select host, user, authentication_string, plugin from user;
#!/usr/bin/expect
####################
set pass xxxx
set user yyyy
####################
spawn ssh -p 35000 -o StrictHostKeyChecking=no "${user}@xgrelay.xxxx.com"
expect {
-re ".*Dkey.*" { gets stdin dkey; send "$dkey\r"; exp_continue}
-re "Option>:" { send "1\r" ;}
-re "Password>:" { send "$pass\r" ; exp_continue }
-re "password:" { send "$pass\r" ; exp_continue }
}
-- data export csv 其中 $1=$1 如果不加指定分隔符不生效mysql -uadmin -ptest -h127.0.0.1 -P3306 -e "select * from test where create_time > unix_timestamp('2020-09-10 00:00:00') and status = 99" | awk '{OFS=","}{$1=$1;print $0}'#csv中文轉(zhuǎn)碼
tmpfn="exempt-update-3.30.csv";iconv -c -s -f UTF-8 -t GBK $tmpfn > /tmp/$tmpfn && mv /tmp/$tmpfn .
#!/bin/bash
for f in "$@"; do
if [ -f "$f" ]; then
iconv -s -c -f UTF8 -t GBK "$f" > /tmp/$f.tmp
mv /tmp/$f.tmp "$f"
fi
done
# -*- coding: utf-8 -*-
#!/usr/bin/python
import re
import io
import sys
# obj = re.compile(r'(?P<ip>.*?)- - \[(?P<time>.*?)\] "(?P<request>.*?)" (?P<status>.*?) (?P<bytes>.*?) "(?P<referer>.*?)" "(?P<ua>.*?)"')
# example:xxxx"id":2640914,"orderId":144115188137125591xxxx"state":10xxxxx"
# 日志整行都需要匹配,需要用的用具體正則匹配,如(\d{7}),不需要的用(.*)匹配,總之所有需要或不需要部分都用()括起來
obj = re.compile(r'(.*"id":)(\d{7})(.*"orderId":)(\d{18})(.*"state":)(\d{2})(.*)')
def load_log(path):
# 讀取文件
with io.open(path, mode="r", encoding="utf-8") as f:
for line in f:
line = line.strip()
parse(line)
def stdin():
# 讀取管道輸入
for line in sys.stdin:
parse(line)
def parse(line):
# 解析單行nginx日志
try:
result = obj.match(line)
print(result.group(2,4,6))
except:
pass
if __name__ == '__main__':
# load_log("/tmp/227.log")
stdin()
- 新增中間件cors
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
c.Header("Access-Control-Allow-Origin", "*") //必選
c.Header("Access-Control-Allow-Headers", "*") //可選 如果request有header, 必選
//c.Header("Access-Control-Allow-Credentials", "true") //可選
//c.Header("Access-Control-Allow-Methods", "*") //可選
//c.Header("Access-Control-Expose-Headers", "*") //可選
//放行所有OPTIONS方法
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusOK)
}
// 處理請(qǐng)求
c.Next()
}
}
- 在router里增加cors,必須在group之前,全局設(shè)置
r.Use(gin.Logger(), gin.Recovery(), cors.Cors())
- 測(cè)試代碼,header設(shè)置不能多于cors設(shè)置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<link type="test/css" href="css/style.css" rel="stylesheet">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#cors").click(
function(){
$.ajax({
headers:{
"Content-Type":"application/json;charset=UTF-8",
"Access":"adsad",
"Access-Token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3QiLCJwYXNzd29yZCI6InRlc3QxMjM0NTYiLCJleHAiOjE1NzczMzY3MTIsImlzcyI6Imdpbi1ibG9nIn0.wMlQXqZO2V0LR-FIgDh45LWI0OYMYi6an_NvRmF0Nug"
},
url:"http://127.0.0.1:8000/api/v1/articles",
success:function(data){
console.log("start");
console.log(data);
}
})
});
});
</script>
<body>
<input type="button" id="cors" value="core跨域測(cè)試">
</body>
</html>
- 請(qǐng)求的headers數(shù)量、名稱與cors里的設(shè)置需要嚴(yán)格對(duì)應(yīng),不然報(bào)錯(cuò)如下
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/v1/articles' from origin 'http://localhost:9999' has been blocked by CORS policy: Request header field access is not allowed by Access-Control-Allow-Headers in preflight response.
1、在main函數(shù)中增加全局配置,其中@name就是你確定的鑒權(quán)參數(shù)名,我的是token, @
in header 說明參數(shù)放在header,你的鑒權(quán)代碼需要從header中獲取
// @title gin-blog API
// @version 0.0.1
// @description This is a gin blog example
// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name token
// @BasePath /
2、在具體的handler里添加如下注釋,此處的ApiKeyAuth和main中的apike對(duì)應(yīng),切記不要修改
// @Security ApiKeyAuth
3、swagger頁面如下:

4、添加token后,后續(xù)所有有鑒權(quán)接口的header里自動(dòng)攜帶token
處理1W條復(fù)雜json數(shù)據(jù)性能對(duì)比
- golang
./go_extract_json 0.95s user 0.12s system 99% cpu 1.081 total
- shell
bash segment.sh 0.64s user 0.07s system 101% cpu 0.695 total
- perl
perl extract.pl 39.57s user 0.54s system 98% cpu 40.579 total
- Invalid bound statement (not found)
在接口名稱及方法名稱對(duì)應(yīng)OK的情況下,在application.properties中添加:
mybatis.mapperLocations=classpath:mapper/*Mapper.xml
mybatis.typeAliasesPackage=com.willpower.entity