中央生態環境保護督察辦公室致函要求統籌做好常態化疫情防控、經濟社會發展和生態環境保護督察工作_貨運

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

2020-08-28 來源:生態環境部

2020-08-28
來源:生態環境部 分享到:
[打印]
字號:[大] [中] [小]   經黨中央、國務院批准,中央生態環境保護督察組(以下簡稱督察組)將於近期陸續進駐北京、天津、浙江3個省(市),國家能源局、國家林業和草原局2個部門,以及中國鋁業集團有限公司、中國建材集團有限公司2家企業,開展第二輪第二批中央生態環境保護督察。為統籌做好常態化疫情防控、經濟社會發展和生態環保督察工作,8月21日,中央生態環境保護督察辦公室專門致函上述省(市)、部門和集團公司,要求堅決貫徹落實中央決策部署,有力有序推進邊督邊改,禁止搞“一刀切”和“濫問責”,並簡化督察接待安排,切實減輕基層負擔。   文件要求,有關省(市)、部門和集團公司在督察進駐期間,應把握工作節奏,突出工作重點,服務“六穩”“六保”,有力有序推進邊督邊改。對於督察組受理轉辦的群眾信訪舉報問題,既要認真核實,堅決整改,切實解決群眾反映突出的生態環境問題;也要依法依規、實事求是,做到一事一辦,一廠一策,嚴禁搞“運動式”整改。對於督察中發現的企業生態環境問題,既要督促有關企業切實履行生態環境保護責任,嚴格整改要求,確保整改到位;也要注重精細化管理,加強指導幫扶,推動復工復產。對於歷史遺留生態環境問題,既要堅持底線思維,嚴控環境風險,保障群眾利益;也要統籌兼顧,合理安排,因地制宜採取措施,努力做到經濟社會與生態環境共贏。   文件強調,

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

有關省(市)、部門和集團公司不得為應付督察採取緊急停工停業停產等簡單粗暴行為,以及“一律關停”“先停再說”等敷衍應對做法。要堅持精準治污、科學治污、依法治污,對於督察發現問題的整改,做到依法依規,注重統籌推進,按照問題的輕重緩急和難易程度,能馬上解決的,要馬上解決;一時解決不了的,要明確整改目標、措施和責任,督促各責任主體抓好落實。要給直接負責整改工作的單位和人員留足時間,禁止層層加碼、避免級級提速。特別是對涉及民生的產業或領域,更要妥善處理、分類施策。對於採取“一刀切”方式消極應對督察的,督察組將嚴肅處理,發現一起、查處一起。   文件要求,有關省(市)、部門和集團公司在督察過程中,既要嚴格按照“嚴肅、精準、有效”的原則做好問責工作,通過必要的問責切實傳導壓力、落實責任,建立長效機制。同時,也要避免以問責代替整改,以及亂問責、濫問責、簡單化問責等行為。對發現涉嫌以問責代替整改,或問責走過場,以及問責泛化、簡單化的,督察組將會提醒警示,情節嚴重的,還將按有關程序報告中央紀委國家監委。   文件明確,中央生態環境保護督察是督察組與有關省(市)、部門和集團公司共同承擔的一項政治任務,需要雙方以高度的政治責任感共同努力、協同推進。在安排督察接待和保障等工作時,能從簡的一律從簡,能簡化的一律簡化,不搞迎來送往,不搞層層陪同,切實減輕基層負擔。有關省(市)、部門和集團公司要督促所轄地市、有關部門和單位如實反映問題,提供真實情況,推進整改落實,做好信息公開,共同營造良好的督察氛圍。

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

中央第四生態環境保護督察組督察中國鋁業集團有限公司動員會在北京召開_網頁設計公司

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

2020-08-31 來源:生態環境部

2020-08-31
來源:生態環境部 分享到:
[打印]
字號:[大] [中] [小]   為深入貫徹落實習近平生態文明思想,按照中央統籌推進常態化疫情防控和經濟社會發展的有關安排,經黨中央、國務院批准,中央第四生態環境保護督察組近日進駐中國鋁業集團有限公司開展生態環境保護督察。8月31日,督察進駐動員會在北京召開,督察組組長黃龍雲、副組長劉華就做好督察工作分別作了講話,中國鋁業集團有限公司黨組書記、董事長姚林進行了進駐動員。   黃龍雲指出,黨的十八大以來,以習近平同志為核心的黨中央高度重視生態文明建設和生態環境保護,將生態文明建設納入中國特色社會主義事業“五位一體”總體布局和“四個全面”戰略布局。習近平總書記站在堅持和發展中國特色社會主義、實現中華民族偉大復興中國夢的戰略高度,親自謀划部署、親自指導推動,提出一系列新理念新思想新戰略,形成習近平生態文明思想,指導我國生態文明建設和生態環境保護取得歷史性成就、發生歷史性變革,成為全黨全國推進生態文明建設和生態環境保護、建設美麗中國的根本遵循。   今年以來,在統籌推進常態化疫情防控和經濟社會發展的形勢下,習近平總書記始終把生態文明建設和生態環境保護掛在心上,走到哪就講到哪,反覆強調要牢固樹立綠水青山就是金山銀山的理念,堅持生態優先、綠色發展,打贏打好污染防治攻堅戰。   習近平總書記高度重視中央生態環境保護督察工作,親自倡導推動這一重大改革舉措,在中央生態環境保護督察每個關鍵環節、每個關鍵時刻都作出重要指示批示,強調要保持方向不變、力度不減,

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

突出精準治污、科學治污、依法治污,落實中央生態環境保護督察制度。   黃龍雲強調,在統籌推進疫情防控和經濟社會發展的大前提下,中央生態環境保護督察要立足服務“六穩”“六保”工作大局,堅持問題導向和結果導向,做到精準、科學、依法督察,達到發現問題、提高認識、教育幹部、解決問題的目標。將重點督察中國鋁業集團有限公司貫徹落實習近平生態文明思想和黨中央、國務院生態環境保護決策部署情況;落實新發展理念、推動高質量發展,以及執行國家生態環境保護法律法規、政策標準情況。   姚林表示,此次中央生態環境保護督察不僅是對中國鋁業集團有限公司落實黨中央決策部署、打好污染防治攻堅戰的工作檢驗,更是對集團貫徹落實習近平生態文明思想、履行生態環境保護責任的政治體檢,也是對集團各級領導幹部政治站位、思想認識的全方位考驗。姚林要求,集團各級領導班子以及有關部門和單位要堅決貫徹落實習近平生態文明思想和黨中央、國務院決策部署,按照督察組的工作安排和要求,全力支持配合督察組完成好各項任務。   會上,劉華就做好督察配合、邊督邊改、信息公開、服務“六穩”“六保”等工作提出了要求,並就督察組全體成員嚴格執行《中央生態環境保護督察紀律規定》,接受被督察對象和社會監督作了表態。中央生態環境保護督察組全體成員、中央生態環境保護督察辦公室有關人員,中國鋁業集團有限公司有關領導同志參加會議,公司總部有關職能部門負責人、總部所在地二級企業領導班子成員等列席會議,總部所在地之外的二級及以上企業領導班子成員,通過視頻會議的形式列席會議。   根據安排,中央第四生態環境保護督察組督察進駐時間為1個月。進駐期間(2020年8月31日-9月30日)設立專門值班電話:010-55604254,專門郵政信箱:北京市西城區A03404號郵政信箱。督察組受理舉報電話時間為每天8:00~20:00。根據黨中央、國務院要求和督察組職責,中央生態環境保護督察組主要受理中國鋁業集團有限公司生態環境保護方面的來信來電信訪舉報。其他不屬於受理範圍的信訪舉報問題,將按規定交由被督察中央企業處理。

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

i7-11700K 跑分陸續現身 Geekbench 5 與 Geekbench 4 資料庫,比上一代快 36%,擊敗 AMD Ryzen 7 5800X_貨運

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

隨著 Intel 可能發表第 11 代桌上型處理器的時間越近,相關疑似的洩漏資訊也越來越多,像最近 i7-11700K 這顆就連續出現在知名 Geekbench 網站上,而且還分別表明,不僅比上一代還要快 34%,單核心與多核心效能也擊敗了競爭對手的 AMD Ryzen 7 5800X,可說讓人相當期待。

i7-11700K 跑分陸續現身 Geekbench 5 與 Geekbench 4 資料庫

稍早在 Geekbench 4 資料庫中,就出現一個 i7-11700K 的跑分結果,搭配的主機版是 Gigabyte Z490 AORUS MASTER。單核心獲得 7857 的分數,多核心則是 42011 分。而上一代 i7-10700K 的跑分結果是,單核心約 6200 分,多核心 35000 分,意味著 i7-11700K 單核心快 25%,多核心也有 20% 的提升幅度:

除了這一筆,在更高版本的 Geenbench 5 資料庫中,幾天前 i7-11700K 的測試結果也現身,共有兩筆,搭配的主機板一樣,最高得分單核心獲得 1810 分,多核心則是 11304 分。跟 i7-10700K 相比差距可說更大,單核心快 36%,多核心快 26%:

也擊敗競爭對手的 AMD Ryzen 7 5800X,單核心與多核心分數都高出 9%,就連 AMD Ryzen 9 5950X 的單核心也勝過,下圖是外媒 Wccftech 整理的表格:

根據目前的消息,i7-11700K 將會是一個 8 核心 16 執行緒的處理器,基本時脈為 3.6GHz,可超頻到 5GHz,TDP 為 125W。

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

Intel 第 11 代桌上型處理器原本預計在今年 3~4 月發表,但各方面傳言都指出會提前到 1 月,有可能在 CES 2021 期間就會見到。

資料來源:Wccftech_1、Wccftech_2

Intel 第 11 代桌上型處理器工程版 i9-11900 跑分搶先曝光

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

AMD桌上型電腦處理器全球市佔率50.8% 睽違15年終於反超Intel_網頁設計公司

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

AMD Rayzen處理器自從問世以來,其實廣受消費者的歡迎,市占率不斷地攀升,嚴重影響到Intel霸主的地位。而近日有外媒透過評測網站的數據,顯示在全球桌上型電腦處理器的部分,AMD 處理器的市占率已經達到50.8%,已經打破由Intel壟斷15年冠軍的局面。

根據《TechSpot》報導指出,他們引述硬體評測網站《PassMark》1月4日的數據,顯示搭載AMD處理器的桌上型電腦,占全球電腦的50.8%,略為超過Intel的49.2%。而這也是自2006年Q1時,AMD睽違15年超越Intel,而當時AMD拿下53.9%的市占率,不過僅維持一個季度,就被Intel超越。

在筆記型電腦的處理器部分,依舊是由Intel的83.8%遙遙領先,AMD在筆記型電腦的市占率上僅有16.3%。而在伺服器處理器部分,數據更加遙遠,本身就以製作伺服器為主的Intel,市佔率高達98.6%,而AMD僅1.4%。

 

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

就整體來看的話,AMD雖然憑藉桌上型處理器市佔的提升,打下不錯的成績。但整體還是由Intel勝出,但兩者之間的差距已經拉近到22.8%,這也自2006年以來,兩者差距最小的一次。

 

PassMark也強調,由於他們的跑芬軟體是建構在Windows的環境下,因此數據無法估算到非Windows的環境。

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

疑似 OPPO Find X3 安兔兔跑分曝光,搭載高通 S888 旗艦處理器測出 77.1 萬分刷新最高分紀錄_包裝設計

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

日前首款發表的高通 Snapdragon 888 旗艦  5G 手機小米11 官方公布安兔兔性能跑分實測為 745,942 分,隨後這成績也很快被接下來 vivo 即將在 1 月 11 日發表的 iQOO 7 以 752,935 分給超越。不過今日是稍早有一款來自 OPPO 的裝置的安兔兔跑分成績出爐,以 771,491 分的高分再次刷新了高通 Snapdragon 888 跑分的新紀錄,而它極有可能就是未來將發表的 OPPO Find X3 。

▲圖片來源:TheLeaks3(Twitter)

疑似 OPPO Find X3 安兔兔跑分曝光,搭載高通 S888 旗艦處理器測出 77.1 萬分刷新最高分紀錄

在小米11 發表之前, Qualcomm 官方就率先公開 Snapdragon 8888 旗艦處理器的工程樣機安兔兔跑分測試結果,當時連續測試三次測得最高 740,847 分、平均分 735,439 分。
除了已經公開的小米11 和 iQOO 7 這兩款 Snapdragon 888 旗艦手機的安兔兔跑分成績已經公開,今日 i冰宇宙在微博上傳一張 OPPO 型號 PEEM00 裝置安兔兔跑分達 771,491 分,這成績也是截至目前的最高分紀錄,在該則貼文更表示這成績是在常溫下測出的,這也表示若在實驗室的環境下測試,分數可能還會再更高。

▲圖片來源:i冰宇宙(微博)

除了強悍的性能表現,關於螢幕方面我們之前也曾引述 Evan Blass 在 Voice 揭露了 OPPO Find X 系列下一代機型 Find X3 系列的傳聞規格,當時爆料指出 OPPO Find X3 系列將推出三款機型,其中最高階的 Find X3 Pro 內部代號為「Fussi」,螢幕採用 6.7 吋 QHD+ 解析度螢幕(3216 x 1440、525 PPI),螢幕將支援 10Hz – 120Hz 可變螢幕更新率,能依照使用情境調節螢幕更新率(最高支持 120Hz)。此外,螢幕也將支持 HDR10+ 10.7 億色顯色。

▲圖片來源:TheLeaks3(Twitter)

去年 OPPO 未來科技大會 2020 已預告 Find X3 系列也將首搭載 OPPO 「全鏈路色彩管理系統」。 OPPO 全鏈路色彩管理系統是一套基於硬件所開發的色彩管理系統,該色彩管理系統擁有兩大核心技術,全鏈路 10-bit 及色彩管理。能夠大幅度提升色彩採集的豐富度,在顯示環節則能讓畫質更加清晰且更精準的還原顯示圖像色彩。

▲圖片來源:OPPO

這組來自 TheLeaks 製作的 OPPO Find X3 系列高清晰渲染圖,最值得關注的是主相機設計這部分採用類似 iPhone 12 Pro 系列的矩陣設計。回顧之前 Evan Blass 描述 Find X3 Pro 將配備 5000 萬像素四鏡頭主相機,當時提到標準鏡頭和超廣角鏡頭都將採用 5000 萬像素的 SONY IMX766 感光元件,日前 IMX766 感光元件率先在 Oppo Reno5 Pro+ 採用。

▲圖片來源:TheLeaks3(Twitter)

近期也有新的傳聞指出 OPPO 目前正與 SONY 緊密合作,即將推出採用 SONY IMX789 感光元件的旗艦手機,不過據數碼閒聊站在微博的消息則表示 IMX789 可能趕不上在這次 Find X3 系列採用。充電方面,傳聞 Find X3 Pro 快充方面預計支援 65W SuperVOOC 2.0 有線快充和 30W AirVOOC 無線快充,也將彌補之前 Find X2 系列未支持無線充電的遺憾。

▲圖片來源:TheLeaks3(Twitter)

昨(4)日, OPPO 在微信公眾號 OPPODAILY 發表了一篇來自 OPPO 總裁陳明永的新年致辭,該主題為「奮進向上,破局高端」。文內另有回顧 2020 年 OPPO 在 Find X2 系列、 Reno 系列等產品上品牌策略,以及 OPPO 於海內外市場和軟硬體的多方佈局。在接下來的 2021 年,也是 OPPO 高階旗艦 Find 系列的 10 週年,並確定將在第一季發表 OPPO Find X3 系列。

▲圖片來源:OPPODAILY(微信公眾號)

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

消息來源:i冰宇宙(微博)|TheLeaks3(Twitter)

延伸閱讀:
Redmi K40 Pro 最新渲染圖曝光:可能是最便宜的 S888 旗艦 5G 手機之一

小米 POCO 官方 Facebook 粉專成立、官網上線,即將以 POCO 品牌「重返」台灣市場

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

中國 YouTuber 搶先揭露 i9-11900K 的測試影片,單核心擊敗對手 Ryzen 9 5900X,時脈達 5.3GHz_包裝設計

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

繼昨日的 i7-11700K 之後,最多遊戲玩家期待的 i9-11900K,也有新傳聞出現了,而且這次還是直接被中國 YouTuber 洩漏評測影片,即便只是測試版的 BIOS,單核心跑分依舊贏過上一代的 i9-10900KF,也擊敗競爭對手的 Ryzen 9 5900X,非常亮眼。另外溫度部分也不意外相當高,壓力測試浮點 FPU 直接過熱降頻,有意入手的人,記得也準備好散熱器的錢。

中國 YouTuber 搶先揭露 i9-11900K 評測影片

上個月中中國就曾出現過第 11 代桌上型處理器 i9-11900 的 ES 工程版,因此這次 i9-11900K 再度於中國現身其實也不讓人意外。雖然這位潮玩客並沒有特別說明是 ES 版還是正式版,但就時間點來看,ES 版的可能性很大。

搭配的主機板為 Socket 1200 LGA,時脈最高可達到 5.3GHz,採 8 核心與 16 執行緒設計:

而實際測試時,目前安裝的 BIOS 還是測試版,因此會有一些問題存在,像是 RAM 最高只能上到 3200MHz、PCI 支援度也有問題,無法正常點亮 PCIe 4.0 的 AMD 與 NVIDIA 顯示卡,因此他們只能搭配 GTX 1660Ti。

全核心運行最高時脈是 4.7GHz,單核則可以達到 5.3GHz,跑 CINEBENCH R20 功耗為 230W:

浮點 FPU 壓力測試功耗更來到 260W,每個核心都快到 100 度,理所當然就過熱降頻了:

CPU-Z 測試單核心獲得 708 分,多核心則是 6443 分,對比 i9-10900KF 與競爭對手的 R9 5900X,單核心都獲勝,不過多核心部分就輸了。這其實合理,畢竟 i9-11900K 目前傳出是 8 核心 16 執行緒,而上一代的 i9-10900KF 為 10 核心 20 執行緒,AMD R9 5900X 更是高達 12 核心 24 執行緒:

另外雖然 i9-11900K 的核心數下降且同樣是 14nm 製程,但在第 11 處理器的架構上,Intel 有做許多改進,因此已經可以跟基於 7nm 製程的 AMD Zen 3 核心比拼。

CINEBENCH R20 單核心獲得 363 分,多核心為 5725 分,單核心一樣贏 i9-10900KF 與 R9 5900X:

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

不過遊戲測試就不太理想,R9 5900X 平均有 388 FPS,i9-10900KF 也達到 285 FPS,但 i9-11900K 僅 220FPS:

其他遊戲也一樣:

從 AIDA64 GPGPU Benchmark 測試結果可以看到,VRAM 的數字 i9-11900K 不太正常:

也僅使用 PCIe x16 1.1 通道,難怪跑出這樣的數據:

目前他們還找不出解決辦法,看來只能等正式版 BIOS 推出後,才能真正了解到遊戲表現究竟能不能勝過對手與上一代。

下方是完整影片:

AMD桌上型電腦處理器全球市佔率50.8% 睽違15年終於反超Intel

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

Hystrix微服務容錯處理及回退方法源碼分析_貨運

※智慧手機時代的來臨,RWD網頁設計為架站首選

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

前言

在 SpringCloud 微服務項目中,我們有了 Eureka 做服務的註冊中心,進行服務的註冊與發現和服務治理。使得我們可以摒棄硬編碼式的 ip:端口 + 映射路徑 來發送請求。我們有了 Feign 作為聲明式服務調用組件,可以像調用本地服務一樣來調用遠程服務。基於 Ribbon 我們又實現了客戶端負載均衡,輕鬆的在集群環境下選取合適的服務提供者。這樣看來我們的微服務貌似很完善了。是這樣的嗎?

並非如此,想想我們在編碼過程中進行的健壯性檢查。類比一下服務與服務調用是否也應該更加健壯一些呢?我們目前的微服務在正常運行的時候是沒有問題的,但若是某個偏下游的服務提供者不可用,造成服務積壓,接連引起上游的服務消費者宕機,引法雪崩效應。是不是就顯得我們的微服務不堪一擊呢?因此我們需要一個組件來解決這樣的問題,前輩們參考生活中保險絲的原理做出了微服務中的保險絲-Hystrix熔斷器。下面讓我們來一起使用一下

聲明:本文首發於博客園,作者:后青春期的Keats;地址:https://www.cnblogs.com/keatsCoder/ 轉載請註明,謝謝!

Hystrix簡介

Hystrix主要實現了下面的功能:

  • 包裹請求:使用 HystrixCommand(或 HystrixObservableCommand) 包裹對依賴的調用邏輯。每個命令在獨立的線程中執行,使用了設計模式中的‘命令模式’
  • 跳閘機制:當某微服務的錯誤率超過一定閾值時,可以自動跳閘,停止請求該服務一段時間
  • 資源隔離:Hystrix 為每個微服務都維護了一個小型的線程池(或信號量)如果該線程池已滿,發往該依賴的請求就會被立即拒絕
  • 監控:Hystrix 可以近乎實時的監控運行指標和配置的變化,例如成功、失敗、超時和被拒絕的請求等
  • 回退機制:當請求成功、失敗、超時和被拒絕或者斷路器打開時,執行回退邏輯。回退邏輯可由開發人員自行提供
  • 自我修復:斷路器打開一段時間后,會進入‘半開’狀態,允許一個請求訪問服務提供方,如果成功。則關閉斷路器

使用 Hystrix

引入依賴

        <!-- 熔斷器 hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

在啟動類上添加 @EnableHystrix

兩種情況下的回退方法

非 Feign 調用下的回退方法

編寫回退方法
/**
 * getUserByAge 方法 Hystrix 回退方法
 * @param age
 * @return
 */
public User getUserByAgeFallBack(Integer age){
    User user = new User();
    user.setName("默認用戶");
    user.setAge(age);
    return user;
}
在客戶端的方法上聲明
@HystrixCommand(fallbackMethod = "getUserByAgeFallBack")

測試:將服務提供方的代碼打斷點。調用服務消費方,會發現返回了默認用戶

需要注意:

  1. 回退方法的返回值類型需要和原來方法返回值類型相同(否則會報 FallbackDefinitionException: Incompatible return types)
  2. 回退方法的參數列表也要和原來方法相同(否則會報 FallbackDefinitionException: fallback method wasn’t found: getUserByAgeFallBack([class java.lang.Integer]))
  3. 當我寫下第二句時,發現書中下一節介紹說可以通過在回退方法中添加第二個參數:ThrowEable 來捕獲異常,分析調用失敗的原因,我就知道我錯了。為了避免繼續得到錯誤的結論,我決定讀一讀 Hystrix 處理回退方法的源碼
加點料:Hystrix 對回退方法的封裝的源碼如下:
com.netflix.hystrix.contrib.javanica.utils.MethodProvider
public FallbackMethod find(Class<?> enclosingType, Method commandMethod, boolean extended) {
	// 首先判斷該方法的 HystrixCommand 註解上有沒有 defaultFallback / fallbackMethod 配置回退方法名稱
    if (this.canHandle(enclosingType, commandMethod)) {
    	// 調用 doFind 方法
        return this.doFind(enclosingType, commandMethod, extended);
    } else {
    	// 沒有配置的化就接着下一個判斷
        return this.next != null ? this.next.find(enclosingType, commandMethod, extended) : FallbackMethod.ABSENT;
    }
}

find 方法在用戶所請求的方法的 HystrixCommand 註解上有用 defaultFallback / fallbackMethod 配置回退方法名稱的時候,會調用 doFind 方法來尋找回退方法。該方法的參數有兩個,enclosingType 是用戶所請求的方法的類字節碼文件,commandMethod 是用戶所請求的方法

首先通過 this.getFallbackName 獲取回退方法名稱,接着通過獲取 commandMethod 的參數類型們

接着分兩種情況:

  1. 回調方法繼承於 commandMethod 且最後一個參數類型是 Throwable,則去掉回退方法參數列表中的 Throwable 類型進行匹配
  2. 回調方法不繼承於 commandMethod ,則存在兩個可能的參數類型列表: fallbackParameterTypes 和 extendedFallbackParameterTypes 前者是 commandMethod 是參數列表,後者是前者 + Throwable。然後兩個都進行匹配。接着使用 Java8 Optional API,按順序選取前者匹配到的方法 / 後者 / 空返回
private FallbackMethod doFind(Class<?> enclosingType, Method commandMethod, boolean extended) {
    String name = this.getFallbackName(enclosingType, commandMethod);
    Class<?>[] fallbackParameterTypes = null;
    if (this.isDefault()) {
        fallbackParameterTypes = new Class[0];
    } else {
        fallbackParameterTypes = commandMethod.getParameterTypes();
    }

    if (extended && fallbackParameterTypes[fallbackParameterTypes.length - 1] == Throwable.class) {
        fallbackParameterTypes = (Class[])ArrayUtils.remove(fallbackParameterTypes, fallbackParameterTypes.length - 1);
    }

    Class<?>[] extendedFallbackParameterTypes = (Class[])Arrays.copyOf(fallbackParameterTypes, fallbackParameterTypes.length + 1);
    extendedFallbackParameterTypes[fallbackParameterTypes.length] = Throwable.class;
    Optional<Method> exFallbackMethod = MethodProvider.getMethod(enclosingType, name, extendedFallbackParameterTypes);
    Optional<Method> fMethod = MethodProvider.getMethod(enclosingType, name, fallbackParameterTypes);
    Method method = (Method)exFallbackMethod.or(fMethod).orNull();
    if (method == null) {
        throw new FallbackDefinitionException("fallback method wasn't found: " + name + "(" + Arrays.toString(fallbackParameterTypes) + ")");
    } else {
        return new FallbackMethod(method, exFallbackMethod.isPresent(), this.isDefault());
    }
}

由源碼可以得到結論:回退方法要麼參數列表和原始方法相同,要麼加且僅加一個類型為 Throwable 的參數。其他的都不行

Feign 客戶端下的回退方法

  1. 設置:feign.hystrix.enabled: true

    ※回頭車貨運收費標準

    宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

  2. Feign 客戶端接口上的 @FeignClient 添加 fallback 屬性,指向回退類

  3. 回退類實現客戶端接口

# feign的配置
feign:
  hystrix:
    enabled: true # 打開 feign 的 hystrix 支持

注意回退類加上 @Component 接口,避免因為 Spring 容器找不到該類而啟動報錯

// Feign 客戶端接口上的 @FeignClient 添加 fallback 屬性,指向回退類
@FeignClient(name = "SERVICE-PROVIDER", fallback = UserServiceFeignClientFallBack.class)
public interface UserServiceFeignClient {

    @GetMapping("/api/v1/user/{age}")
    User getUser(@PathVariable("age") Integer age);

    /**
     * 用戶列表
     * @return
     */
    @GetMapping("/api/v1/users")
    List<User> getUsers();
}
// 回退類實現客戶端接口
@Component 
public class UserServiceFeignClientFallBack implements UserServiceFeignClient {
    @Override
    public User getUser(Integer age) {
        return null;
    }

    @Override
    public List<User> getUsers() {
        return null;
    }
}

當採用 Feign 客戶端來實現回退的時候,前面的捕捉異常方法就不起作用了,那我們應該如何來處理異常呢?可以使用 @FeignClient 的 fallbackFactory 屬性

@FeignClient(name = "SERVICE-PROVIDER", fallbackFactory = UserServiceFallbackFactory.class)

@Component
@Slf4j
public class UserServiceFallbackFactory implements FallbackFactory<UserServiceFeignClient> {
    @Override
    public UserServiceFeignClient create(Throwable t) {
        // 日誌最好寫在各個 fallback 方法中,而不要直接卸載 create方法中
        // 否則引用啟動時就會打印該日誌

        return new UserServiceFeignClient() {
            @Override
            public User getUser(Integer age) {
                log.info("調用User服務提供者失敗", t);
                User user = new User();
                user.setName("默認用戶");
                user.setAge(age);
                return user;
            }

            @Override
            public List<User> getUsers() {
                return null;
            }
        };
    }
}

注意: **fallback 和 fallbackFactory 屬性同時存在時,fallback 的優先級更高。因此開發中如果需要處理異常,只需配置 fallbackFactory 屬性即可 **

避免業務異常走進回退方法

在某些場景下,當發生業務異常時,我們並不想觸發 fallback。例如業務中判斷年齡 age 不能小於 1,否則拋出異常

if(age < 1){
    throw new KeatsException(ExceptionEnum.NUM_LESS_THAN_MIN);
}

這時 Hystrix 會捕捉到異常然後執行 fallback 方法,我們可以通過下面兩個方法來避免:

  1. 繼承 HystrixBadRequestException 該類繼承自 RunntimeException
  2. 在 @HystrixCommand 添加屬性 ignoreExceptions = {KeatsException.class}

為 Feign 禁用 Hystrix

只要打開 feign 的 hystrix 支持開關,feign 就會使用斷路器包裹 feign 客戶端的所有方法,但很多場景並不需要這樣。該如何禁用呢?

  • 為指定客戶端禁用。需要藉助 Feign 的自定義配置。首先添加一個自定義配置類,然後配置到 @FeignClient 的 configuration 屬性中
@Configuration
public class FeignDisableHystrixConfiguration {
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder(){
        return Feign.builder();
    }
}

@FeignClient(name = "SERVICE-PROVIDER", configuration = {FeignDisableHystrixConfiguration.class})
  • 全局禁用: feign.hystrix.enabled: false

本博客中所有示例代碼都已上傳至 github倉庫: https://github.com/keatsCoder/cloud-cli

參考文獻:《Spring Cloud與Docker 微服務架構實戰》 — 周立

碼字不易,如果你覺得讀完以後有收穫,不妨點個推薦讓更多的人看到吧!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※評比南投搬家公司費用收費行情懶人包大公開

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

【Java8新特性】關於Java8中的日期時間API,你需要掌握這些!!_網頁設計公司

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

寫在前面

Java8之前的日期和時間API,存在一些問題,比如:線程安全的問題,跨年的問題等等。這些問題都在Hava8中的日期和時間API中得到了解決,而且Java8中的日期和時間API更加強大。立志成為架構師的你,必須掌握Java8中的日期和時間API。

本地時間和時間戳

主要方法:

  • now:靜態方法,根據當前時間創建對象
  • of:靜態方法,根據指定日期/時間創建對象
  • plusDays,plusWeeks,plusMonths,plusYears:向當前LocalDate 對象添加幾天、幾周、幾個月、幾年
  • minusDays,minusWeeks,minusMonths,minusYears:從當前LocalDate 對象減去幾天、幾周、幾個月、幾年
  • plus,minus:添加或減少一個Duration 或Period
  • withDayOfMonth,withDayOfYear,withMonth,withYear:將月份天數、年份天數、月份、年份修改為指定的值並返回新的LocalDate 對象
  • getDayOfYear:獲得年份天數(1~366)
  • getDayOfWeek:獲得星期幾(返回一個DayOfWeek枚舉值)
  • getMonth:獲得月份, 返回一個Month 枚舉值
  • getMonthValue:獲得月份(1~12)
  • getYear:獲得年份
  • until:獲得兩個日期之間的Period 對象,或者指定ChronoUnits 的数字
  • isBefore,isAfter:比較兩個LocalDate
  • isLeapYear:判斷是否是閏年

使用 LocalDate、 LocalTime、 LocalDateTime

LocalDate、 LocalTime、 LocalDateTime 類的實例是不可變的對象,分別表示使用 ISO-8601日曆系統的日期、時間、日期和時間。它們提供了簡單的日期或時間,並不包含當前的時間信息。也不包含與時區相關的信息。

注: ISO-8601日曆系統是國際標準化組織制定的現代公民的日期和時間的表示法

方法 描述 示例
now() 靜態方法,根據當前時間創建對象 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now();
of() 靜態方法,根據指定日期/時間創建 對象 LocalDate localDate = LocalDate.of(2016, 10, 26); LocalTime localTime = LocalTime.of(02, 22, 56); LocalDateTime localDateTime = LocalDateTime.of(2016, 10, 26, 12, 10, 55);
plusDays, plusWeeks, plusMonths, plusYears 向當前 LocalDate 對象添加幾天、 幾周、 幾個月、 幾年
minusDays, minusWeeks, minusMonths, minusYears 從當前 LocalDate 對象減去幾天、 幾周、 幾個月、 幾年
plus, minus 添加或減少一個 Duration 或 Period
withDayOfMonth, withDayOfYear, withMonth, withYear 將月份天數、 年份天數、 月份、 年 份 修 改 為 指 定 的 值 並 返 回 新 的 LocalDate 對象
getDayOfMonth 獲得月份天數(1-31)
getDayOfYear 獲得年份天數(1-366)
getDayOfWeek 獲得星期幾(返回一個 DayOfWeek 枚舉值)
getMonth 獲得月份, 返回一個 Month 枚舉值
getMonthValue 獲得月份(1-12)
getYear 獲得年份
until 獲得兩個日期之間的 Period 對象, 或者指定 ChronoUnits 的数字
isBefore, isAfter 比較兩個 LocalDate
isLeapYear 判斷是否是閏年

示例代碼如下所示。

// 獲取當前系統時間
LocalDateTime localDateTime1 = LocalDateTime.now();
System.out.println(localDateTime1);
// 運行結果:2019-10-27T13:49:09.483

// 指定日期時間
LocalDateTime localDateTime2 = LocalDateTime.of(2019, 10, 27, 13, 45,10);
System.out.println(localDateTime2);
// 運行結果:2019-10-27T13:45:10

LocalDateTime localDateTime3 = localDateTime1
        // 加三年
        .plusYears(3)
        // 減三個月
        .minusMonths(3);
System.out.println(localDateTime3);
// 運行結果:2022-07-27T13:49:09.483

System.out.println(localDateTime1.getYear());       // 運行結果:2019
System.out.println(localDateTime1.getMonthValue()); // 運行結果:10
System.out.println(localDateTime1.getDayOfMonth()); // 運行結果:27
System.out.println(localDateTime1.getHour());       // 運行結果:13
System.out.println(localDateTime1.getMinute());     // 運行結果:52
System.out.println(localDateTime1.getSecond());     // 運行結果:6

LocalDateTime localDateTime4 = LocalDateTime.now();
System.out.println(localDateTime4);     // 2019-10-27T14:19:56.884
LocalDateTime localDateTime5 = localDateTime4.withDayOfMonth(10);
System.out.println(localDateTime5);     // 2019-10-10T14:19:56.884

Instant 時間戳

用於“時間戳”的運算。它是以Unix元年(傳統的設定為UTC時區1970年1月1日午夜時分)開始所經歷的描述進行運算 。

示例代碼如下所示。

Instant instant1 = Instant.now();    // 默認獲取UTC時區
System.out.println(instant1);
// 運行結果:2019-10-27T05:59:58.221Z

// 偏移量運算
OffsetDateTime offsetDateTime = instant1.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
// 運行結果:2019-10-27T13:59:58.221+08:00

// 獲取時間戳
System.out.println(instant1.toEpochMilli());
// 運行結果:1572156145000

// 以Unix元年為起點,進行偏移量運算
Instant instant2 = Instant.ofEpochSecond(60);
System.out.println(instant2);
// 運行結果:1970-01-01T00:01:00Z

Duration 和 Period

Duration:用於計算兩個“時間”間隔。

Period:用於計算兩個“日期”間隔 。

Instant instant_1 = Instant.now();
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
Instant instant_2 = Instant.now();

Duration duration = Duration.between(instant_1, instant_2);
System.out.println(duration.toMillis());
// 運行結果:1000

LocalTime localTime_1 = LocalTime.now();
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
LocalTime localTime_2 = LocalTime.now();

System.out.println(Duration.between(localTime_1, localTime_2).toMillis());
// 運行結果:1000
LocalDate localDate_1 = LocalDate.of(2018,9, 9);
LocalDate localDate_2 = LocalDate.now();

Period period = Period.between(localDate_1, localDate_2);
System.out.println(period.getYears());      // 運行結果:1
System.out.println(period.getMonths());     // 運行結果:1
System.out.println(period.getDays());       // 運行結果:18

日期的操縱

TemporalAdjuster : 時間校正器。有時我們可能需要獲取例如:將日期調整到“下個周日”等操作。

TemporalAdjusters : 該類通過靜態方法提供了大量的常用 TemporalAdjuster 的實現。

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

例如獲取下個周日,如下所示:

LocalDate nextSunday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

完整的示例代碼如下所示。

LocalDateTime localDateTime1 = LocalDateTime.now();
System.out.println(localDateTime1);     // 2019-10-27T14:19:56.884

// 獲取這個第一天的日期
System.out.println(localDateTime1.with(TemporalAdjusters.firstDayOfMonth()));            // 2019-10-01T14:22:58.574
// 獲取下個周末的日期
System.out.println(localDateTime1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));       // 2019-11-03T14:22:58.574

// 自定義:下一個工作日
LocalDateTime localDateTime2 = localDateTime1.with(l -> {
    LocalDateTime localDateTime = (LocalDateTime) l;
    DayOfWeek dayOfWeek =  localDateTime.getDayOfWeek();

    if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
       return localDateTime.plusDays(3);
    } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
       return localDateTime.plusDays(2);
    } else {
       return localDateTime.plusDays(1);
    }
});
System.out.println(localDateTime2);
// 運行結果:2019-10-28T14:30:17.400

解析與格式化

java.time.format.DateTimeFormatter 類:該類提供了三種格式化方法:

  • 預定義的標準格式
  • 語言環境相關的格式
  • 自定義的格式

示例代碼如下所示。

DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ISO_DATE;
LocalDateTime localDateTime = LocalDateTime.now();
String strDate1 = localDateTime.format(dateTimeFormatter1);
System.out.println(strDate1);
// 運行結果:2019-10-27

// Date -> String
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd  HH:mm:ss");
String strDate2 = dateTimeFormatter2.format(localDateTime);
System.out.println(strDate2);
// 運行結果:2019-10-27  14:36:11

// String -> Date
LocalDateTime localDateTime1 = localDateTime.parse(strDate2, dateTimeFormatter2);
System.out.println(localDateTime1);
// 運行結果:2019-10-27T14:37:39

時區的處理

Java8 中加入了對時區的支持,帶時區的時間為分別為:ZonedDate、 ZonedTime、 ZonedDateTime。

其中每個時區都對應着 ID,地區ID都為 “{區域}/{城市}”的格式,例如 : Asia/Shanghai 等。

  • ZoneId:該類中包含了所有的時區信息
  • getAvailableZoneIds() : 可以獲取所有時區時區信息
  • of(id) : 用指定的時區信息獲取 ZoneId 對象

示例代碼如下所示。

// 獲取所有的時區
Set<String> set = ZoneId.getAvailableZoneIds();
System.out.println(set);
// [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi, America/Marigot, Asia/Aqtau, Pacific/Kwajalein, America/El_Salvador, Asia/Pontianak, Africa/Cairo, Pacific/Pago_Pago, Africa/Mbabane, Asia/Kuching, Pacific/Honolulu, Pacific/Rarotonga, America/Guatemala, Australia/Hobart, Europe/London, America/Belize, America/Panama, Asia/Chungking, America/Managua, America/Indiana/Petersburg, Asia/Yerevan, Europe/Brussels, GMT, Europe/Warsaw, America/Chicago, Asia/Kashgar, Chile/Continental, Pacific/Yap, CET, Etc/GMT-1, Etc/GMT-0, Europe/Jersey, America/Tegucigalpa, Etc/GMT-5, Europe/Istanbul, America/Eirunepe, Etc/GMT-4, America/Miquelon, Etc/GMT-3, Europe/Luxembourg, Etc/GMT-2, Etc/GMT-9, America/Argentina/Catamarca, Etc/GMT-8, Etc/GMT-7, Etc/GMT-6, Europe/Zaporozhye, Canada/Yukon, Canada/Atlantic, Atlantic/St_Helena, Australia/Tasmania, Libya, Europe/Guernsey, America/Grand_Turk, US/Pacific-New, Asia/Samarkand, America/Argentina/Cordoba, Asia/Phnom_Penh, Africa/Kigali, Asia/Almaty, US/Alaska, Asia/Dubai, Europe/Isle_of_Man, America/Araguaina, Cuba, Asia/Novosibirsk, America/Argentina/Salta, Etc/GMT+3, Africa/Tunis, Etc/GMT+2, Etc/GMT+1, Pacific/Fakaofo, Africa/Tripoli, Etc/GMT+0, Israel, Africa/Banjul, Etc/GMT+7, Indian/Comoro, Etc/GMT+6, Etc/GMT+5, Etc/GMT+4, Pacific/Port_Moresby, US/Arizona, Antarctica/Syowa, Indian/Reunion, Pacific/Palau, Europe/Kaliningrad, America/Montevideo, Africa/Windhoek, Asia/Karachi, Africa/Mogadishu, Australia/Perth, Brazil/East, Etc/GMT, Asia/Chita, Pacific/Easter, Antarctica/Davis, Antarctica/McMurdo, Asia/Macao, America/Manaus, Africa/Freetown, Europe/Bucharest, Asia/Tomsk, America/Argentina/Mendoza, Asia/Macau, Europe/Malta, Mexico/BajaSur, Pacific/Tahiti, Africa/Asmera, Europe/Busingen, America/Argentina/Rio_Gallegos, Africa/Malabo, Europe/Skopje, America/Catamarca, America/Godthab, Europe/Sarajevo, Australia/ACT, GB-Eire, Africa/Lagos, America/Cordoba, Europe/Rome, Asia/Dacca, Indian/Mauritius, Pacific/Samoa, America/Regina, America/Fort_Wayne, America/Dawson_Creek, Africa/Algiers, Europe/Mariehamn, America/St_Johns, America/St_Thomas, Europe/Zurich, America/Anguilla, Asia/Dili, America/Denver, Africa/Bamako, Europe/Saratov, GB, Mexico/General, Pacific/Wallis, Europe/Gibraltar, Africa/Conakry, Africa/Lubumbashi, Asia/Istanbul, America/Havana, NZ-CHAT, Asia/Choibalsan, America/Porto_Acre, Asia/Omsk, Europe/Vaduz, US/Michigan, Asia/Dhaka, America/Barbados, Europe/Tiraspol, Atlantic/Cape_Verde, Asia/Yekaterinburg, America/Louisville, Pacific/Johnston, Pacific/Chatham, Europe/Ljubljana, America/Sao_Paulo, Asia/Jayapura, America/Curacao, Asia/Dushanbe, America/Guyana, America/Guayaquil, America/Martinique, Portugal, Europe/Berlin, Europe/Moscow, Europe/Chisinau, America/Puerto_Rico, America/Rankin_Inlet, Pacific/Ponape, Europe/Stockholm, Europe/Budapest, America/Argentina/Jujuy, Australia/Eucla, Asia/Shanghai, Universal, Europe/Zagreb, America/Port_of_Spain, Europe/Helsinki, Asia/Beirut, Asia/Tel_Aviv, Pacific/Bougainville, US/Central, Africa/Sao_Tome, Indian/Chagos, America/Cayenne, Asia/Yakutsk, Pacific/Galapagos, Australia/North, Europe/Paris, Africa/Ndjamena, Pacific/Fiji, America/Rainy_River, Indian/Maldives, Australia/Yancowinna, SystemV/AST4, Asia/Oral, America/Yellowknife, Pacific/Enderbury, America/Juneau, Australia/Victoria, America/Indiana/Vevay, Asia/Tashkent, Asia/Jakarta, Africa/Ceuta, Asia/Barnaul, America/Recife, America/Buenos_Aires, America/Noronha, America/Swift_Current, Australia/Adelaide, America/Metlakatla, Africa/Djibouti, America/Paramaribo, Europe/Simferopol, Europe/Sofia, Africa/Nouakchott, Europe/Prague, America/Indiana/Vincennes, Antarctica/Mawson, America/Kralendijk, Antarctica/Troll, Europe/Samara, Indian/Christmas, America/Antigua, Pacific/Gambier, America/Indianapolis, America/Inuvik, America/Iqaluit, Pacific/Funafuti, UTC, Antarctica/Macquarie, Canada/Pacific, America/Moncton, Africa/Gaborone, Pacific/Chuuk, Asia/Pyongyang, America/St_Vincent, Asia/Gaza, Etc/Universal, PST8PDT, Atlantic/Faeroe, Asia/Qyzylorda, Canada/Newfoundland, America/Kentucky/Louisville, America/Yakutat, Asia/Ho_Chi_Minh, Antarctica/Casey, Europe/Copenhagen, Africa/Asmara, Atlantic/Azores, Europe/Vienna, ROK, Pacific/Pitcairn, America/Mazatlan, Australia/Queensland, Pacific/Nauru, Europe/Tirane, Asia/Kolkata, SystemV/MST7, Australia/Canberra, MET, Australia/Broken_Hill, Europe/Riga, America/Dominica, Africa/Abidjan, America/Mendoza, America/Santarem, Kwajalein, America/Asuncion, Asia/Ulan_Bator, NZ, America/Boise, Australia/Currie, EST5EDT, Pacific/Guam, Pacific/Wake, Atlantic/Bermuda, America/Costa_Rica, America/Dawson, Asia/Chongqing, Eire, Europe/Amsterdam, America/Indiana/Knox, America/North_Dakota/Beulah, Africa/Accra, Atlantic/Faroe, Mexico/BajaNorte, America/Maceio, Etc/UCT, Pacific/Apia, GMT0, America/Atka, Pacific/Niue, Australia/Lord_Howe, Europe/Dublin, Pacific/Truk, MST7MDT, America/Monterrey, America/Nassau, America/Jamaica, Asia/Bishkek, America/Atikokan, Atlantic/Stanley, Australia/NSW, US/Hawaii, SystemV/CST6, Indian/Mahe, Asia/Aqtobe, America/Sitka, Asia/Vladivostok, Africa/Libreville, Africa/Maputo, Zulu, America/Kentucky/Monticello, Africa/El_Aaiun, Africa/Ouagadougou, America/Coral_Harbour, Pacific/Marquesas, Brazil/West, America/Aruba, America/North_Dakota/Center, America/Cayman, Asia/Ulaanbaatar, Asia/Baghdad, Europe/San_Marino, America/Indiana/Tell_City, America/Tijuana, Pacific/Saipan, SystemV/YST9, Africa/Douala, America/Chihuahua, America/Ojinaga, Asia/Hovd, America/Anchorage, Chile/EasterIsland, America/Halifax, Antarctica/Rothera, America/Indiana/Indianapolis, US/Mountain, Asia/Damascus, America/Argentina/San_Luis, America/Santiago, Asia/Baku, America/Argentina/Ushuaia, Atlantic/Reykjavik, Africa/Brazzaville, Africa/Porto-Novo, America/La_Paz, Antarctica/DumontDUrville, Asia/Taipei, Antarctica/South_Pole, Asia/Manila, Asia/Bangkok, Africa/Dar_es_Salaam, Poland, Atlantic/Madeira, Antarctica/Palmer, America/Thunder_Bay, Africa/Addis_Ababa, Asia/Yangon, Europe/Uzhgorod, Brazil/DeNoronha, Asia/Ashkhabad, Etc/Zulu, America/Indiana/Marengo, America/Creston, America/Punta_Arenas, America/Mexico_City, Antarctica/Vostok, Asia/Jerusalem, Europe/Andorra, US/Samoa, PRC, Asia/Vientiane, Pacific/Kiritimati, America/Matamoros, America/Blanc-Sablon, Asia/Riyadh, Iceland, Pacific/Pohnpei, Asia/Ujung_Pandang, Atlantic/South_Georgia, Europe/Lisbon, Asia/Harbin, Europe/Oslo, Asia/Novokuznetsk, CST6CDT, Atlantic/Canary, America/Knox_IN, Asia/Kuwait, SystemV/HST10, Pacific/Efate, Africa/Lome, America/Bogota, America/Menominee, America/Adak, Pacific/Norfolk, Europe/Kirov, America/Resolute, Pacific/Tarawa, Africa/Kampala, Asia/Krasnoyarsk, Greenwich, SystemV/EST5, America/Edmonton, Europe/Podgorica, Australia/South, Canada/Central, Africa/Bujumbura, America/Santo_Domingo, US/Eastern, Europe/Minsk, Pacific/Auckland, Africa/Casablanca, America/Glace_Bay, Canada/Eastern, Asia/Qatar, Europe/Kiev, Singapore, Asia/Magadan, SystemV/PST8, America/Port-au-Prince, Europe/Belfast, America/St_Barthelemy, Asia/Ashgabat, Africa/Luanda, America/Nipigon, Atlantic/Jan_Mayen, Brazil/Acre, Asia/Muscat, Asia/Bahrain, Europe/Vilnius, America/Fortaleza, Etc/GMT0, US/East-Indiana, America/Hermosillo, America/Cancun, Africa/Maseru, Pacific/Kosrae, Africa/Kinshasa, Asia/Kathmandu, Asia/Seoul, Australia/Sydney, America/Lima, Australia/LHI, America/St_Lucia, Europe/Madrid, America/Bahia_Banderas, America/Montserrat, Asia/Brunei, America/Santa_Isabel, Canada/Mountain, America/Cambridge_Bay, Asia/Colombo, Australia/West, Indian/Antananarivo, Australia/Brisbane, Indian/Mayotte, US/Indiana-Starke, Asia/Urumqi, US/Aleutian, Europe/Volgograd, America/Lower_Princes, America/Vancouver, Africa/Blantyre, America/Rio_Branco, America/Danmarkshavn, America/Detroit, America/Thule, Africa/Lusaka, Asia/Hong_Kong, Iran, America/Argentina/La_Rioja, Africa/Dakar, SystemV/CST6CDT, America/Tortola, America/Porto_Velho, Asia/Sakhalin, Etc/GMT+10, America/Scoresbysund, Asia/Kamchatka, Asia/Thimbu, Africa/Harare, Etc/GMT+12, Etc/GMT+11, Navajo, America/Nome, Europe/Tallinn, Turkey, Africa/Khartoum, Africa/Johannesburg, Africa/Bangui, Europe/Belgrade, Jamaica, Africa/Bissau, Asia/Tehran, WET, Europe/Astrakhan, Africa/Juba, America/Campo_Grande, America/Belem, Etc/Greenwich, Asia/Saigon, America/Ensenada, Pacific/Midway, America/Jujuy, Africa/Timbuktu, America/Bahia, America/Goose_Bay, America/Virgin, America/Pangnirtung, Asia/Katmandu, America/Phoenix, Africa/Niamey, America/Whitehorse, Pacific/Noumea, Asia/Tbilisi, America/Montreal, Asia/Makassar, America/Argentina/San_Juan, Hongkong, UCT, Asia/Nicosia, America/Indiana/Winamac, SystemV/MST7MDT, America/Argentina/ComodRivadavia, America/Boa_Vista, America/Grenada, Asia/Atyrau, Australia/Darwin, Asia/Khandyga, Asia/Kuala_Lumpur, Asia/Famagusta, Asia/Thimphu, Asia/Rangoon, Europe/Bratislava, Asia/Calcutta, America/Argentina/Tucuman, Asia/Kabul, Indian/Cocos, Japan, Pacific/Tongatapu, America/New_York, Etc/GMT-12, Etc/GMT-11, Etc/GMT-10, SystemV/YST9YDT, Europe/Ulyanovsk, Etc/GMT-14, Etc/GMT-13, W-SU, America/Merida, EET, America/Rosario, Canada/Saskatchewan, America/St_Kitts, Arctic/Longyearbyen, America/Fort_Nelson, America/Caracas, America/Guadeloupe, Asia/Hebron, Indian/Kerguelen, SystemV/PST8PDT, Africa/Monrovia, Asia/Ust-Nera, Egypt, Asia/Srednekolymsk, America/North_Dakota/New_Salem, Asia/Anadyr, Australia/Melbourne, Asia/Irkutsk, America/Shiprock, America/Winnipeg, Europe/Vatican, Asia/Amman, Etc/UTC, SystemV/AST4ADT, Asia/Tokyo, America/Toronto, Asia/Singapore, Australia/Lindeman, America/Los_Angeles, SystemV/EST5EDT, Pacific/Majuro, America/Argentina/Buenos_Aires, Europe/Nicosia, Pacific/Guadalcanal, Europe/Athens, US/Pacific, Europe/Monaco]

// 通過時區構建LocalDateTime
LocalDateTime localDateTime1 = LocalDateTime.now(ZoneId.of("America/El_Salvador"));
System.out.println(localDateTime1);
// 2019-10-27T00:46:21.268

// 以時區格式显示時間
LocalDateTime localDateTime2 = LocalDateTime.now();
ZonedDateTime zonedDateTime1 = localDateTime2.atZone(ZoneId.of("Africa/Nairobi"));
System.out.println(zonedDateTime1);
// 2019-10-27T14:46:21.273+03:00[Africa/Nairobi]

與傳統日期處理的轉換

寫在最後

如果覺得文章對你有點幫助,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習Java8新特性。

最後,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

漢字不能編程?只是看着有點豪橫!容易被開除!_包裝設計

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

作者:小傅哥
博客:https://bugstack.cn

沉澱、分享、成長,讓自己和他人都能有所收穫!

一、前言

在編程的路上你是否想過,用漢字寫一寫代碼?

最近有初學編程的小夥伴問小傅哥,漢字可以寫代碼嗎。自己英文不好,要是漢字可以寫代碼就好了。難道你要的是易語言?其實並不是,小夥伴也是學習 Java 的初學者,剛剛學習到 Spring 看着一片沒有註釋的代碼實在不好理解,要是都是漢字寫的,那不和讀作文一樣了嗎!

說道註釋,我想到大部分程序員討厭的兩件事

  1. 不喜歡寫註釋
  2. 不喜歡別人不寫註釋

其實對於學習編程來說,初學時寫寫案例,完成簡單的功能,反覆練習夯實基礎。數學和英文都還並不是你的絆腳石,因為你不需要做複雜的邏輯處理,比如算法。也不需要查閱大量的資料,比如原版的英文資料以及國內沒有翻譯的技術書籍等。所以這個時候對你來說,只是需要不斷的學,不斷的寫。並逐步強加自己的數學和英文能力。

回到我們的說的,既然你問漢字可以寫代碼嗎。其實在 java 里,原則上你可以寫漢字的屬性方法JVM虛擬機也是可以通過編譯執行的。只是這樣的代碼並不能很好的維護,甚至說亂碼了也很麻煩。再者,有人寫方言怎麼辦!

好!那麼我們接下來就使用漢字的方式來編寫一段關於 SpringAop 的案例!

二、開發環境

  1. JDK 1.8.0
  2. Spring 4.3.24.RELEASE
  3. 本篇涉及的源碼下載,可以關注公眾號bugstack蟲洞棧 獲取,並且還可以獲取更多原創案例。

三、技術實現

為了這個案例更加真實,我們模擬電影清朝韋小寶時期,太監入宮的過程。說白了也就是 SpringAOP 面向切面,的編程。

在做案例之前,我們先了解一下 AOP 的基本概念;

  1. @Aspect,定義切面的註解
  2. @Pointcut,切入點,一般會在方法上設定通配符表達式
  3. @Around,環繞,也就是你原本的方法會在這裏處理
  4. @Before,前置處理
  5. @After,後置處理

1. 定義切面

紫禁城.內務府.敬事房.臏.太監臏.凈身監管.java

※產品缺大量曝光嗎?你需要的是一流包裝設計!

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

@Aspect
@Component
public class 凈身監管 {

    @Pointcut("execution(public * 紫禁城.內務府.敬事房.利器庫..*.軍刺切(..))")
    public void 監管員(){

    }

    @Before("監管員()")
    public void 敬事前(){
        System.out.println("敬事前:---------準備下刀... ...");
    }

    @After("監管員()")
    public void 敬事後(){
        System.out.println("敬事後:---------切面完成... ...");
    }

    @Around("監管員()")
    public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {

        System.out.println("待切身份:"+pjp.getArgs()[0]);
        System.out.println("執行工具:"+pjp.getSignature().getName());

        //獲得傳遞對象,並做處理
        太監臏 太監 = (太監臏) pjp.getArgs()[0];
        SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd");
        太監.set敬事日期(timeFormat.format(new Date()));

        //此處可以傳遞更改后的參數
        Object obj = pjp.proceed(new Object[]{太監});

        return obj;

    }

}
  • @Aspect,定義切面類,用於處理程序中的切面編程操作。
  • @Pointcut("execution(public * 紫禁城.內務府.敬事房.利器庫..*.軍刺切(..))"),定義切點處,對那些方法進行執行切面操作。除了這樣的操作外,還可以定義成自定義註解。那麼後續只要把某個你需要的方法上面添加這樣的自定義註解,就可以被 AOP 攔截。
  • @Before("監管員()")@After("監管員()"),記錄切面執行前後的記錄。
  • @Around("監管員()"),用於環繞方法增強,可以這裏去處理方法中的一些屬性信息,比如添加給某個字段添加時間。太監.set敬事日期(timeFormat.format(new Date()));

2. 設置切面可執行方法

紫禁城.內務府.敬事房.利器庫.切除器具.java

@Component("切除")
public class 切除器具 {

    public 太監臏 軍刺切(太監臏 太監){
        太監.set性別(宦官.太監.name());
        System.out.println("... 啊 ... ...老子被切面了!"+太監.get姓名());
        return 太監;
    }

}
  • 這裏類的方法就是上面定義的切點,Pointcut,也就是會被切面處理的方法。

3. 執行切面操作類

紫禁城.內務府.敬事房.執刀人.張三豐執刀.java

public class 張三豐執刀 {

    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("皇太極.xml");

        太監刑 太監行刑 = ctx.getBean("太監刑",太監刑.class);

        太監臏 太監 = new 太監臏();
        太監.set姓名("小德張");
        太監.set年齡("9");
        太監.set性別(宦官.男.name());

        太監 = 太監行刑.執行切除(太監);

        System.out.println("\r\n切除狀態:"+太監);
    }

}
  • 首先這裏定義了獲取 Spring 註解的 Application,用於我們獲取 Bean
  • 接下來定義一個對象類,主要傳遞具體參數信息交給執行切面的方法,進行操作。
  • 最後輸出結果信息,也就是我們可以看到具體被切面操作的方法。

四、測試結果

1. 執行內容

啟動方法;紫禁城.內務府.敬事房.執刀人.張三豐執刀.java

待切身份:太監臏 [姓名=小德張, 年齡=9, 性別=男, 敬事日期=]
執行工具:軍刺切
敬事前:---------準備下刀... ...
... 啊 ... ...老子被切面了!小德張
敬事後:---------切面完成... ...

切除狀態:太監臏 [姓名=小德張, 年齡=9, 性別=太監, 敬事日期=2020-05-05]

Process finished with exit code 0

2. 效果圖

五、總結

  • 漢字編程,好奇可以試試,但別真的用到項目里。本文也只是通過這樣的例子,向你展示學習過程的樂趣,建立一些學習過程的好感。

  • 最近加了很多剛入門學習編程的小夥伴,有很多小問號。比如;

    我是非常建議先跑起來,多寫代碼后再慢慢的去探究原理!

  • 最近聽到一首詩,不錯;廿四橋邊廿四風,憑欄猶憶舊江東。夕陽返照桃花渡,柳絮飛來片片紅。,白色的柳絮在夕陽桃花的映襯下就是成了片片紅。只要你敢學識淵博,就敢讓你擁有翻江倒海之力。

六、彩蛋

CodeGuide | 程序員編碼指南 Go!

本代碼庫是作者小傅哥多年從事一線互聯網 Java 開發的學習歷程技術匯總,旨在為大家提供一個清晰詳細的學習教程,側重點更傾向編寫Java核心內容。如果本倉庫能為您提供幫助,請給予支持(關注、點贊、分享)!

七、推薦閱讀

  • 用Java實現JVM虛擬機(漢字真的可以處理為關鍵字進行編碼)
  • 重學 Java 設計模式:實戰單例模式(Effective Java 作者推薦使用枚舉的方式解決單例模式)
  • 重學 Java 設計模式:實戰原型模式(多套試卷亂序題目)
  • 重學 Java 設計模式:實戰建造者模式(裝修套餐選配)
  • 重學 Java 設計模式:實戰抽象工廠模式(Redis集群使用升級)
  • 重學 Java 設計模式:實戰工廠方法模式(多種商品發獎)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

氣場碾壓漢蘭達的平民版奧迪Q7 上市后是要大殺四方了!_網頁設計公司

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

動力方面,根據上汽大眾在工信部申報消息的流出,此款SUV將會搭載一款2。0T發動機,且會分為高低功率版本,此外,還會配備一台2。5T V6發動機。至於發動機型號以及技術特點我們暫時不得而知,但是有一點幾乎可以肯定,V6發動機配置車型鐵定不會便宜。

前段時間上汽大眾旗下旗艦C級轎車輝昂迎來了正式上市,而上汽大眾官方也正式透露消息,除了輝昂之外,在不久的將來,上汽大眾會有一台中型SUV國產上市,有望於在2017年第一季度正式推出。

全新的SUV衍生於大眾Cross Blue概念車,雙幅式鍍鉻中網與燈組相連,整體性更強,視覺效果也會顯得整車更寬。

當下該SUV尚未有正式的中文命名,但已經在美國發布的車型英文名稱定為“Atlas”。根據大眾品牌現有的途觀、途銳兩款SUV來看,或許會為了車型家族化特徵更加明顯,將這款SUV以“途”字命名,

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

至於叫什麼好聽,我們只能等待官方消息,當然,也歡迎各位朋友在留言中各抒己見。

車身尺寸方面,Atlas車長超過5米,整車三圍尺寸為:5039*1989*1773mm,而軸距也會達到2980mm。從尺寸上看已經超過了現款途銳,與奧迪Q7的車身尺寸倒是非常相近(奧迪Q7尺寸為5069*1968*1716mm)。

動力方面,根據上汽大眾在工信部申報消息的流出,此款SUV將會搭載一款2.0T發動機,且會分為高低功率版本,此外,還會配備一台2.5T V6發動機。至於發動機型號以及技術特點我們暫時不得而知,但是有一點幾乎可以肯定,V6發動機配置車型鐵定不會便宜。

上汽大眾的全新中型SUV推出其實也是一個勢在必行的動作,畢竟目前合資中型SUV幾乎是漢蘭達和銳界的天下,作為國人信任程度極高的大眾品牌,旗下只有一款途觀在撐着場面有些略顯尷尬,不出意外該款全新SUV將會有5座和7座的兩種作為布局選擇。距離該車上市尚有一段時間,小編也會持續對其保持高度關注。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。