func init() {
dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s", USERNAME, PASSWORD, NETWORK, SERVER, PORT, DATABASE)
NEWDB, err = sql.Open("mysql", dsn)
if err != nil {
fmt.Printf("Open mysql failed,err:%v\n", err)
return
}
//DB.SetConnMaxLifetime(1 * time.Second) //最大连接周期,超过时间的连接就close
NEWDB.SetMaxOpenConns(8) //设置最大连接数
NEWDB.SetMaxIdleConns(5) //设置闲置连接数
fmt.Printf("数据库连接池准备成功")
}
func process() {
//DB := NEWDB
//4个携程,4个查询连接,还要写入,最少8个连接数
total := 100
process := 4
pageSize := 10
eachTimes := total / process //没给携程处理的条数
for i := 0; i < process; i++ {
startId := i * eachTimes
endId := eachTimes * (i + 1)
go func(i int, startId int) {
subTotal := 0
for {
if startId >= endId {
fmt.Println("已处理完毕:", subTotal)
break
}
fmt.Println("[process]:", i, ",start_id: ", startId, "end_id:", endId, "limit: ", pageSize)
signLog := new(SignInLog)
rows, err := DB.Query("select * from sign_in_log where id > ? and id<? limit ?", startId, endId, pageSize)
if err != nil {
fmt.Println(err)
}
for rows.Next() {
rows.Scan()
err := rows.Scan(
&signLog.ID,
&signLog.UserId,
&signLog.RecentSignTime,
&signLog.FirstSignTime,
&signLog.SignType
)
if err != nil {
fmt.Printf("err : %v \n", err)
continue
}
fmt.Printf("%+v \n", signLog)
//NewInsertData(signLog)
subTotal++
}
defer rows.Close()
startId += pageSize
}
}(i, startId)
}
}