阿歷一周工作總結-001

在一個沒有互聯網公司上班節奏的互聯網公司上班,是一種什么樣的體驗?錢多活少少加班。

但是不要太羨慕我,因為,這家公司要撐不多久了。據總裁說,撐到年末,生則還罷,死則好散。剛畢業就進入一家走下坡路,到今日奄奄一息的公司,我也算是“走運”啦。感恩的是自己沒有被裁掉,并且在這節奏不快的日子遇到好老大、好同事,做項目,不斷學習著、進步著。

前幾天看到得到招有代碼潔癖的工程師,我聯想到一起合作過幾周的同事。他差不多就是有代碼潔癖的人,注釋寫得……我說不明白,就是一切都很規范。我還寫不了多高明的代碼,至少做到規范吧。

本周總結就從代碼規范之打日志開始:


1. 代碼規范-日志打印

打日志的作用之一是方便排查問題(也有注釋的作用,我還沒想到其他作用……)。不然報個錯、拋個異常,你都不知道是什么原因導致的,是傳參錯了,還是邏輯錯了?不明所以會很抓狂。

首先,日志的打印格式是在Spring配置文件中定義的,例如:

<Pattern>

%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n

</Pattern>

這里不詳細解釋其中參數的含義了(因為我還不懂==!)

其次,在源文件中注意在關鍵位置打日志

最基本的,要打日志的位置:入參,出參,異常信息……

注意日志要打得有信息含量。舉例沒有信息含量的日志:

log.info("交易成功。"); // 這對于我看前后的問題沒有幫助好吧,至少打印一下返回什么消息了吧。

比較有信息量的日志:

log.info("交易成功, 返回的消息為:{}", msg.toString());

另外,定義打日志的規范,每個方法定義自己的日志前綴。什么意思?我們一般會打印日志生成的類的名字,如果再追加方法名,能將日志粒度細化,更容易定位問題。出現問題了,你一看方法名,能大概知道程序執行到哪個環節出問題了。

我現在打日志的套路:

public void myMethod(String aStr) {

? ? // 日志前綴:方法名

? ? String logPrefix = Thread.currentThread().getStackTrace()[1].getMethodName() +"(): ";?

? ? log.info("{}我是一行日志:{}", logPrefix, aStr);

? ? // 其他代碼

}


2. SQLException: Unknown error 1205

這周在測代碼,到了更新表那步的時候,長時間不返回,拋了一個異常。拋異常不怕,怕的是你告訴我它是“Unknown error”。好吧,有用的信息是執行SQL語句的時候出現問題了,錯誤碼是1205,現象是程序執行到一個位置長時間(好幾秒的樣子)不往下進行,最后拋了異常,debug結束。

從異常信息來看是MySQL數據庫出現問題了,去Mysql直接執行這條sql也出現同樣的現象,長時間不返回,最后報了一個1205。這種情況,要么是鎖等待,要么是有沒提交的事務,導致其他SQL語句無法執行。

(1)檢查是否存在鎖等待

select * from information_schema.innodb_lock_waits; -- 查看是否有鎖等待

show full processlist; -- 查看所有運行著的進程,是否有跟鎖有關的進程

(2)查看未提交事務

SELECT * FROM information_schema.INNODB_TRX; -- 查看未提交的事務

SELECT trx_mysql_thread_id FROM information_schema.INNODB_TRX; -- 查看事務的線程id

kill some_id; -- 停掉事務,kill的是trx_mysql_thread_id

在我這個問題場景中沒有鎖等待,但查出了未提交事務。我kill掉這個事務之后,SQL語句就可以執行了。至于這個事務是怎么冒出來的,我也不知道==!

如果拋的異常帶有lock wait的信息,那就是有鎖等待了。


3. 接著聊Mysql

順著Mysql接著碼一下這2個月以來自己寫過的關于索引、事件、存儲過程的SQL語句。這部分沒什么,就是Mysql的語法,如果你很熟,此部分可以跳過:

(1)索引操作

-- 加索引

alter table TABLE_NAME add index idx_name (COLUMN_NAME);

-- 刪索引

drop index idx_name?on TABLE_NAME;

-- 查看索引

show index from TABLE_NAME;

加索引的講究以后再說(這個我還是知道一點的)。

(2)事件調度器

Mysql的事件調度器,作用類似linux下的crontab,java中的scheduler。可以定時執行某項任務。

-- 查看事件調度器

SHOW VARIABLES LIKE 'event_scheduler';

-- 打開事件調度器

SET GLOBAL event_scheduler = ON;

-- 刪除事件調度器

DROP EVENT IF EXISTS event_name;

-- 創建事件調度器

CREATE EVENT event_name ON SCHEDULE EVERY 1 DAY STARTS '2017-09-13 00:00:00' ENABLE DO update table_name set column_name = 0;

-- 修改事件調度器

ALTER EVENT event_name?ON SCHEDULE EVERY 1 DAY;

事件調度器的時間格式這里就不介紹了~~


4. 存儲過程

對!細心的你可能發現了,3沒有介紹存儲過程。對!我放到這里啦~

這里要講,在Mysql中創建存儲過程,以及如何在Mybatis中調用存儲過程。

(1)Mysql創建存儲過程

drop procedure if exists procedure_name; -- 刪除存儲過程

delimiter // -- 修改結束符為"http://"

-- 創建存儲過程

CREATE PROCEDURE procedure_name(OUT result INT) -- OUT 指定返回參數

BEGIN

update table_name set column_name = column_name+1;

SELECT column_name from table_name;

END;//

delimiter ; --把結束符改回";"

call procedure_name(@a); -- 調用存儲過程,測一下

(2)在Mybatis中調用存儲過程

dao.xml中的定義

<selectid="getId" parameterType="java.util.Map" statementType="CALLABLE" resultType="java.lang.Integer">

{call procedure_name(#{res, jdbcType=INTEGER, mode=OUT})}

</select>

dao.java中方法聲明

Integer getId(@Param("res")Integer res);

service.java中調用

getId(null); // 因為傳入的是返回參數,所以傳null


本周總結了打印日志的規范,解決一個Mysql 1205問題,回顧Mysql索引、事件、存儲過程的使用。小白在持續進步中...

希望本文對你也有一丟丟的幫助^^

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,729評論 18 399
  • 什么是SQL數據庫: SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 1,833評論 0 10
  • 任務需求:定時執行的任務,調用存儲過程,進行數據遷移。 存儲過程相關總結:(存儲過程的創建 不能伴隨有if exi...
    時待吾閱讀 3,105評論 0 4
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,829評論 0 11
  • 脾氣暴怒的男人容易猝死,脾氣暴怒的男人不僅容易發生中風,也容易發生猝死。而且,這些人所面臨的危險比那些所謂A型個性...
    秦小涵閱讀 493評論 0 1