背景:服務請求一體化專案公升級到v4的服務請求型別時,所有配置庫資料遷移到各省的業務庫中,雖然資料出現大量冗餘,但是這是唯一能解決v4 大量服務請求型別不在同一張表中的騷操作了,防止查詢服務請求型別時gg。但是唯一考慮不足的就是對於全網需求的碼表資料指令碼新增出現指令碼編寫困難,大量重複沒有意義的工作,佔據了開發人員的大把時間,同時,對dba來說這也是個噩夢,但是沒有辦法,規定不改就是這樣。
針對以上問題,為了釋放開發勞動力的大把時間(懶) 小民構思出了以下的工具。
根據開發人員提供的指令碼模板自動生成其他30+省的資料庫指令碼。
本工具的實現思路:
各省端指令碼除了 省份編碼不同外,還有就是抬頭不同,抬頭包含 資料庫ip 資料庫名稱,聯絡人,**,操作條數。我們可以將31個省的資料庫ip 使用者名稱 配置在資料庫中,其他資料由使用者在上傳檔案時提供。 後台首先查詢抬頭模板,替換掉使用者提供的資料,再解析sql模板,查詢各省配置資料,遍歷動態生成不同省的指令碼檔案。
資料庫表涉及:
-- 抬頭模板表create
table
`t_head_templat` (
`uid`
int(10) unsigned not
null auto_increment comment '
prk'
, `template_code`
varchar(32) default
null comment '
模板型別id',
`template_rmk`
varchar(32) default
null comment '
模板型別名稱',
`template_value`
varchar(2000) default
null comment '
模板內容',
`crtime`
datetime
default
null comment '
建立時間',
primary
key(`uid`)
) engine
=innodb auto_increment=
2default charset=utf8
--省份資料庫ip表
create
table
`t_provcode_ip` (
`uid`
int(10) unsigned not
null auto_increment comment '
prk'
, `provcode`
varchar(32) default
null comment '
省份編碼',
`provname`
varchar(32) default
null comment '
省份名稱',
`ip`
varchar(32) default
null comment 'ip'
, `port`
varchar(10) default
null comment '埠'
, `sql_name`
varchar(20) default
null comment '
資料庫名',
`user_name` varchar(20) default
null comment '
資料庫使用者名稱',
`crtime`
datetime
default
null comment '
建立時間',
primary
key(`uid`)
) engine
=innodb auto_increment=
35default charset=utf8
1.檔案上傳
檔案格式校驗
必填引數校驗
2.解析sql檔案,存放於list中
3.查詢省份ip及抬頭模板
4.遍歷省份資料庫資訊 組裝抬頭,將資料依次寫入指定路徑
5.所有省份資料進行壓縮
7.提供清楚指定使用者資料介面
**不提供了,沒有多少技術含量,這裡說下需要注意的細節:
1.使用io的時候一定記得flush()
2.使用表單上傳檔案的時候帶引數的操作 貼一部分吧
functionsubmitfile() );
return
; }
if(fileobj));
return
; }
}else
);
return
; }
$.ajax(
});}
3.寫檔案的路徑,也是最坑的地方。這裡一定要使用絕對路徑,不能使用相對路徑。
我的打的war包部署在linux伺服器上,開始是已相對路徑寫的,本地測試沒有一點問題,但是上了環境後就出現了大問題
2.解決方法,使用絕對路徑,首先是絕對路徑的獲取,然後拼接檔案要放的資料。
string path = null;
try
catch
(filenotfoundexception e)
over 歡迎使用
操作手冊:
重複指令碼自動生成工具操作手冊
--by 宅小濤
1.首先您應該準備您的指令碼模板 以insert指令碼為例,需要注意以下幾點:
1.檔案應該是txt檔案。
2.每條語句都應該是正確無誤的可執行語句。
3.每條插入語句不要換行,按照中移規範編寫。
4.指令碼應以雲南編寫 即 provcode 應該為 00030016
5.指令碼不要新增抬頭。
正確指令碼 eg:
2.根據頁面要求,您必須輸入以下內容:
2.運算元量:抬頭中填寫的操作的資料量,如果已知請填寫具體數字,該欄位同樣是必填,可以填寫未知
3.檔名稱:生成的指令碼的名稱,因為生成的指令碼是31個省+2個二線機構+重客的指令碼,因此名稱需要加以區分
例如需要生成的指令碼的命名如下:
則這裡需要填寫的檔名稱為:
洛陽-服務請求-生產-@@-ngwf-20190314-2-2-insert-sql
注意:1.檔名稱不要加字尾;2.@@必須存在,指令碼會被覆蓋。3.不要新增指令碼頂的注釋,注釋會自動生成。
專案位址 :
使用sed命令自動生成insert語句
要從檔案中插入一批資料到mongodb中,檔案裡的資料長這樣,分隔符為tab鍵,生成的語句如下,我沒有寫成指令碼,直接用命令處理的,所以分好幾次。db.world.insert afghanistan asia 652230 25500100 20343000000 albania europe 2...
自動生成業務單據流水號方案
我們在開發管理軟體的時候,常常遇到流水號 單據號 登記號 自動生成 控制和管理的問題。由於流水號 具有唯一性和連續性的特點,在實際開發過程中若處理不好,會產生流水號重複及斷號的問題。特別是多個併發用 戶同時儲存一張同樣的業務單據時,系統會返回多個相同的流水號。筆者以前在開發企業erp系統的時候,就曾...
自動生成資料庫字典
1.首先需要填寫表的每一列的說明 2.建立試圖 go object view dbo sura view dbdictionary script date 05 31 2013 17 19 19 set ansi nulls on goset quoted identifier on gocreat...