電動車推廣過於仰賴補助金?補助不明 1 月電動機車掛牌數下滑至 4.5%

2020 年中央政府電動機車補助減少,加上各地方政府新年度補助尚未完全公布之下,1 月台灣機車總掛牌數量 46,211 輛當中,僅有 2,101 輛為電動機車。

根據「中華電信數據所」的資料顯示,2020 年 1 月台灣機車市場掛牌總數當中,44,110 輛為燃油車,電動車則為 2,101 輛,油車與電車的銷售比為 95.5%:4.5%。2019 年 12 月電動機車掛牌量達到創紀錄的 28,701 輛,占整體機車掛牌量的 26.83%。

相較於 2019 年屢創高峰的氣勢,2020 年 1 月電動機車的銷量下滑不少。原因基本上可以歸咎於三點,首先是中央電動機車補助減少,環保署補助完全退場,工業局補助則減少 3,000 元。雖然會有環保署汰舊換新補助補位,但新購電動機車補助還是會受到影響。

2020 年 1 月機車市場中燃油機車占 95.5%,電動機車僅占 4.5%。

其次則是消費者的預期心理,由於 2020 年補助金額降低,因此有興趣的消費者會選擇提前在 2019 年底購買。雖然創造了 2019 年 11 月和 12 月的銷售高峰,但 2020 年的銷量也提早兌現。

第三是各縣市補助辦法尚未明朗,截至過年前僅有 8 個縣市公布電動機車補助方案。其中台北市、彰化和屏東跟隨中央政策,不再補助新購電動機車,其他縣市則調降補助金額或維持不變,汰舊換新補助各縣市也有幅度不等的減少。但包括新北市和高雄市兩個電動機車銷售重鎮都尚未公布,因此這些縣市應該有不少消費者保持觀望。

多數縣市尚未公告 2020 年電動機車補助,公告的大多有幅度不一的減少。

光陽(Kymco)執行長柯俊斌認為,1 月電動機車市場仍極度仰賴補助,地方政府補助辦法尚未全面公告,因此銷售仍不見起色。由於電動機車銷量減少的影響,以及農曆春節連續假期,整體機車市場也較上個月衰退。此外,雖然新型冠狀病毒疫情廣受關注,不過對機車銷量的衝擊尚不明顯,有待進一步觀察。

(合作媒體:。圖片來源:光陽)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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

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

※教你寫出一流的銷售文案?

工信部將調查新能源車騙補 違規或將取消資質

日前,有媒體報導稱,部分電動車廠和租賃運營公司,以迴圈使用電池組裝配整車方式,以少充多,騙取政府對新能源汽車的大量補貼。高額補貼不僅令一些原本沒有新能源技術儲備的汽車生產企業爭先恐後投入“電動化”,還在銷售環節進行算計。目前工信部等部門已經啟動調查,針對騙取新能源汽車補貼的企業或將面臨吊銷生產資質的嚴厲處罰。

對此,一位從事動力電池專家王敏(化名)在接受採訪時表示:“這種現象的確存在,靠不正當手法獲得補貼的企業多為小型企業或改裝廠。”
  
王敏對此解釋稱,一些車企騙取新能源補貼的方式主要有兩種,一是整車企業全資或參股汽車租賃公司,通過“自產自銷”的方式,拿到國家和地方對電動車的補貼;租賃公司購買的車輛並沒有投入運營,但是這些車輛在上牌之後,補貼已經到手。在兩類細分行業,一類是用於共用、租賃的乘用車,一類是用於城市物流的運營類車輛,都有騙補的情況發生。

另一種方式,則是由一家汽車租賃運營公司主導,一邊採購整車企業,一邊與電池企業合作,通過“多採購整車,少採購電池”的方式,從中獲取補貼。這種方式是通過協力廠商運營公司來暗箱操作,有些車輛運營公司,一手牽著產銷規模甚小的電動車生產企業,一手與動力電池生產企業合作,通過將兩類公司的產品捏合在一起組成電動車,獲得政府補貼,很多車輛“空有牌照”,並沒有真正上路運營。

根據2015年12月財政部發佈的《關於2016~2020年新能源汽車推廣應用財政支持政策的通知》,純電動、插電式混合動力(含增程式)等專用車、貨車推廣應用補助標準:按電池容量每千瓦時補助1800元。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

工信部與重慶簽訂啟動智慧汽車與智慧交通合作協議

1月27日,中國工業和資訊化部、重慶市人民政府在重慶簽訂“基於寬頻移動互聯網的智慧汽車與智慧交通應用示範合作框架協定”,將共同推動構建4.5G/5G、智慧汽車與智慧交通融合發展的產業生態。

根據合作框架協定和建設方案,工業和資訊化部、重慶市人民政府將共同推動構建4.5G/5G、智慧汽車與智慧交通融合發展的產業生態,研發一批智慧汽車與智慧交通關鍵技術和產品,帶動電子資訊、寬頻移動通信、移動互聯網、物聯網、汽車製造等相關產業的發展。

未來三年,重慶市將逐步由試驗場區封閉環境到城市交通開放環境,加強關於自動駕駛、交通安全、舒適及節能環保、資訊服務及娛樂、交通管理等領域的新技術、新產品研究開發和檢測認證。重慶將在智慧駕駛、智慧路網、綠色用車、防盜追蹤、便捷停車、車與車的資源分享、大範圍交通誘導、交通狀態智慧管理等多個方面進行應用示範。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

※新北清潔公司,居家、辦公、裝潢細清專業服務

F-立凱、五龍動力聯手搶攻中國電動車市場

F-立凱公告將與五龍動力、香港上市公司五龍電動車集團簽訂三方交易契約,共同深化電動車產業的上、下游布局,著眼爭取中國乃至於全球的電動車市場。

根據協議,三方將以策略聯盟、資本合作的方式取得股權轉換方案。契約載明,五龍動力將以每股新台幣35元的價格取得立凱電新發行的普通股,佔增資後股本21.8%;思慕完成後,五龍電動車集團在另外以1億港幣(約新台幣4.2億)現金取得立凱電旗下車電事業部門──立凱綠能(蓋曼)股權,以及台灣立凱綠能的部分資產。交易完成後,五龍動力與五龍電動車集團預計將投資凱電超過新台幣20億元。

此外,立凱電同時將以每股0.5元港幣的價格認購五龍電動車集團新發行之430萬普通股與2.75億元港幣的無擔保可轉換公司債,總投資額預計將達港幣4.9億元,並成為五龍電動車集團股東。此舉將幫助立凱電正式邁入中國電動車市場。

F-立凱由尹衍樑投資,為電動巴士系統與磷酸鐵鋰電池正極材料廠商。與五龍動力、五龍電動車集團的交易完成後,將在兩岸三地與國際市場進行明確產業分工,由立凱電繼續投入正極材料研發、製造與銷售,同時為五龍動力提供LFP-NCO奈米金屬氧化物共晶體化磷酸鋰鐵電池正極材料M系列產品的生產與技術顧問服務。三方也將合作於中國建立材料廠,以因應未來中國電動車龐大的材料需求。

此外,台灣立凱綠能也將與五龍電動車在電池芯、電池模組以及電動車技術等領域合作,同時不忘繼續拓展台灣電動巴士業務。F-立凱表示,本次策略聯盟,將可幫助F-立凱、五龍動力、五龍電動車集團、立凱電整合技術、製造、市場、供應鏈與資金,全面進軍中國與全球的儲能市場和電動車市場。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

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

※幫你省時又省力,新北清潔一流服務好口碑

Gogoro積極搶市,南臺灣首站小琉球

台灣本土電動機車品牌Gogoro又展開新動作!Gogoro與遠傳電信合作,推出申辦門號即享購車折扣的優惠,未來還將建立更廣泛的物聯網(IoT)功能。同時,Gogoro也正式走入南台灣,首個佈點將位於離島小琉球。

搶市,Gogoro與通訊業者合作

Gogoro日前宣布與遠傳電信合作推出「超級騎機」優惠購車方案,從5月13日起,凡到Gogoro門市申辦特定遠傳電信方案,就享有最高新台幣2萬元的購車優惠。若加上政府對民眾換購電動載具所提出的補貼,Gogoro最低只要新台幣4.3萬元就能騎回家,比目前主流的汽油機車還便宜。

Gogoro表示,未來將與遠傳合作推動更多IoT服務,強化「智慧城市」與「量身打造」功能。

此外,Gogoro為了替客戶降低使用成本,還將推出購車送免費里程1,200公里、電池租金低資費方案等服務,電池每月最低租金599元,可行駛400公里,超過後每1公里1元新台幣,積極搶市。

台灣另一家電動機車業者中華汽車也大力推動e-moving車款,直接刺激台灣市場需求。目前,台灣每月電動機車銷量已達1,200輛左右,占整體機車銷售量2%以上。

Gogoro登上小琉球島!

成功在大台北、桃園、新竹等北台灣縣市佈點後,Gogoro進軍南台灣的第一站,被直擊將登陸離島小琉球。報導指出,小琉球去年底結束一間電動機車公司的合約,空出約300輛機車的需求缺口;有業者看上此一商機,因此與Gogoro商議,協助Gogoro南進,初期先引入100輛電動車試水溫。

相較於舊款電動機車,Gogoro的馬力、續航力更好。且小琉球空間不大,設置一座24小時運作的電池交換站就很足夠。

(照片來源:Gogoro Taiwan 臉書專頁)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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

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

※教你寫出一流的銷售文案?

特斯拉第 2 季淨損擴大 二度下修銷售預測

美國電動車大廠特斯拉(Tesla)公佈第 2 季財報,凈虧損為 1.843 億美元,而因車輛銷售持續攀高,營收成長 24%,達到 9.55 億美元,但與去年同期的凈虧損 1.542 億美元相比有所擴大,且一年內第二度下修銷售預測。   特斯拉表示,今年交車目標為 5 萬至 5.5 萬輛之間。去年執行長穆斯克發下豪語,說今年的銷售量將達 6 萬輛,今年稍早已調降到 5.5 萬輛,如今再度下修。不過,特斯拉仍預期今年 9 月底這款車將開始「少量交車」,但進度就算只延後一周,整體產量就會減少約 800 輛。     特斯拉上季資本支出總計 4.052 億美元,主要是持續用在 Model X 新車,以及預定 2016 年開幕的內華達州電池新廠。今年上半年的總支出達 8.312 億美元,預估全年支出約為 15 億美元。經調整後特斯拉上季每股虧損 48 美分,優於分析師預估的每股虧損 60 美分,去年同期則是每股獲利 13 美分。         

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

※不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置,台北網頁設計,各種案例分享

※別再煩惱如何寫文案,掌握八大原則!

中碳展開電動車、電池材料投資

台灣中碳尋求投資轉型,因看好中國大陸電動車與電池相關產業的發展,因此在30日的年終記者會上宣布將啟動新投資案,搶攻中國大陸市場。

中碳於記者會上表示,公司業績與油價高度相關,近日國際油價重挫,使公司尋求轉型以降低油價衝擊。其中,中國大陸因霾害嚴重,政府帶頭推動電動車產業,公司因此認為值得發展,將以公司的電池負極材料搶攻中國大陸的電動車市場。

根據MoneyDJ的報導,中碳將投資約27億新台幣,在台灣屏東、小港、越南、中國大陸常州等地進行新的投資或擴產計畫,藉著這四大投資案來將碳材料與石化產品擴充為兩大營收來源。目前,中碳的碳材料營收比重已從去年的8%成長到今年的12%,明年可望進一步成長到16%。隨著擴產計畫,希望能在2020年拉高到50%。

在屏東廠方面,中碳董事會將通過18.8億新台幣的擴產方案,規劃碳化、石墨化、篩分廠的年產能各2,000噸,預計於2018年第一季投產,供應電動車與超級電容的市場需求,

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

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

※南投搬家前需注意的眉眉角角,別等搬了再說!

※新北清潔公司,居家、辦公、裝潢細清專業服務

“電動汽車就是大家電” 中國首次將電動汽車引入家電連鎖賣場

中國首家電動汽車跨平臺運營商聯合電動21日在北京與蘇甯易購達成全面戰略合作,首次將電動汽車引入家電連鎖賣場,電動汽車作為新的電器商品門類與消費者見面。這是中國電動車在汽車流通領域的一次大膽嘗試,並將引發銷售管道顛覆性的變革。

自此,消費者在逛電器商城時可以零距離地瞭解、購買電動汽車。此舉不僅為消費者帶來極大的便利,而且也論證了“電動汽車就是大家電”的全新理念。業內稱,這將為中國電動汽車行業的發展帶來革命性的思考和進步。

中國汽車流通協會秘書長肖政三表示,將電動汽車引進家電連鎖賣場,迎合了汽車銷售多元化發展問題,汽車超市的概念是一種模式的創新,給消費者帶來的便利是可以預見的。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

SpringBoot 源碼解析 (一)—– SpringBoot核心原理入門

Spring Boot 概述

Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.

上面是引自官網的一段話,大概是說: Spring Boot 是所有基於 Spring 開發的項目的起點。Spring Boot 的設計是為了讓你盡可能快的跑起來 Spring 應用程序並且盡可能減少你的配置文件。

什麼是 Spring Boot

  • 它使用 “習慣優於配置” (項目中存在大量的配置,此外還內置一個習慣性的配置,讓你無須手動配置)的理念讓你的項目快速運行起來。
  • 它並不是什麼新的框架,而是默認配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包一樣,Spring Boot 整合了所有框架

使用 Spring Boot 有什麼好處

回顧我們之前的 SSM 項目,搭建過程還是比較繁瑣的,需要:

  • 1)配置 web.xml,加載 spring 和 spring mvc
  • 2)配置數據庫連接、配置日誌文件
  • 3)配置家在配置文件的讀取,開啟註解
  • 4)配置mapper文件
  • …..

而使用 Spring Boot 來開發項目則只需要非常少的幾個配置就可以搭建起來一個 Web 項目,並且利用 IDEA 可以自動生成生成

  • 划重點:簡單、快速、方便地搭建項目;對主流開發框架的無配置集成;極大提高了開發、部署效率。

Spring Boot HelloWorld

導入依賴spring boot相關的依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.chenhao</groupId>
    <artifactId>springboot</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

編寫主程序

/**
 * @SpringBootApplication來標註一個主程序類,說明這是一個SpringBoot應用
 */ @SpringBootApplication public class HelloWorldMainApplication {

    public static void main(String[] args) {
        //Spring應用啟動
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }
}

編寫Controller、Service

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "Hello world";
    }
}

運行主程序測試

使用maven打包命令將其打包成jar包后,直接使用命令:

java -jar xxx.jar

Hello World探究

POM文件

父項目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/>
</parent>

其父項目是

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

該父項目是真正管理Spring Boot應用裏面的所有依賴的版本:Spring Boot的版本仲裁中心,所以以後導入的依賴默認是不需要版本號。如下

還有很多版本號沒有截圖出來

啟動器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

​ spring-boot-starter : spring boot場景啟動器;幫助導入web模塊正常運行所依賴的組件;

​ Spring Boot將所有的功能場景抽取出來,做成一個個的starter(啟動器),只需要在項目中引入這些starter,那麼相關的場景的所有依賴都會導入進項目中。要用什麼功能就導入什麼場景的啟動器。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>

添加了 spring-boot-starter-web 依賴,會自動添加 Tomcat 和 Spring MVC 的依賴

spring-boot-starter-web中又引入了spring-boot-starter-tomcat

主程序類(主入口類)

@SpringBootApplication public class HelloWorldMainApplication {

    public static void main(String[] args) {
        //Spring應用啟動
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }
}

@SpringBootApplication

  • Spring Boot應用標註在某個類上,說明這個類是SpringBoot的主配置類,SpringBoot就應該運行這個類的main方法來啟動SpringBoot應用。

註解定義如下:

@SpringBootConfiguration @EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}

@SpringBootConfiguration

  • Spring Boot的配置類
  • 標註在某個類上,表示這是一個Spring Boot的配置類

註解定義如下:

@Configuration public @interface SpringBootConfiguration {}

其實就是一個Configuration配置類,意思是HelloWorldMainApplication最終會被註冊到Spring容器中

@EnableAutoConfiguration

  • 開啟自動配置功能
  • 以前使用Spring需要配置的信息,Spring Boot幫助自動配置;
  • @EnableAutoConfiguration通知SpringBoot開啟自動配置功能,這樣自動配置才能生效。

註解定義如下:

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {}

@AutoConfigurationPackage

  • 自動配置包註解
@Import(AutoConfigurationPackages.Registrar.class) public @interface AutoConfigurationPackage {}

@Import(AutoConfigurationPackages.Registrar.class):默認將主配置類(
@SpringBootApplication)所在的包及其子包裏面的所有組件掃描到Spring容器中。如下

@Order(Ordered.HIGHEST_PRECEDENCE)
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata,
            BeanDefinitionRegistry registry) {
          //默認將會掃描@SpringBootApplication標註的主配置類所在的包及其子包下所有組件
        register(registry, new PackageImport(metadata).getPackageName());
    }

    @Override
    public Set<Object> determineImports(AnnotationMetadata metadata) {
        return Collections.<Object>singleton(new PackageImport(metadata));
    }
}

@Import(EnableAutoConfigurationImportSelector.class)

EnableAutoConfigurationImportSelector: 導入哪些組件的選擇器,將所有需要導入的組件以全類名的方式返回,這些組件就會被添加到容器中。

 1 //EnableAutoConfigurationImportSelector的父類:AutoConfigurationImportSelector
 2 @Override
 3 public String[] selectImports(AnnotationMetadata annotationMetadata) {
 4     if (!isEnabled(annotationMetadata)) {
 5         return NO_IMPORTS;
 6     }
 7     try {
 8         AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
 9             .loadMetadata(this.beanClassLoader);
10         AnnotationAttributes attributes = getAttributes(annotationMetadata);
11         List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes); 12         configurations = removeDuplicates(configurations);
13         configurations = sort(configurations, autoConfigurationMetadata);
14         Set<String> exclusions = getExclusions(annotationMetadata, attributes);
15         checkExcludedClasses(configurations, exclusions);
16         configurations.removeAll(exclusions);
17         configurations = filter(configurations, autoConfigurationMetadata);
18         fireAutoConfigurationImportEvents(configurations, exclusions);
19         return configurations.toArray(new String[configurations.size()]);
20     }
21     catch (IOException ex) {
22         throw new IllegalStateException(ex);
23     }
24 }

我們主要看第11行List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);會給容器中注入眾多的自動配置類(xxxAutoConfiguration),就是給容器中導入這個場景需要的所有組件,並配置好這些組件。我們跟進去看看

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
            AnnotationAttributes attributes) {
    List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
        getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
    //...
    return configurations;
}

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
    return EnableAutoConfiguration.class;
}

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
    String factoryClassName = factoryClass.getName();
    try {
        //從類路徑的META-INF/spring.factories中加載所有默認的自動配置類
        Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
                                 ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
        List<String> result = new ArrayList<String>();
        while (urls.hasMoreElements()) {
            URL url = urls.nextElement();
            Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));
            //獲取EnableAutoConfiguration指定的所有值,也就是EnableAutoConfiguration.class的值
            String factoryClassNames = properties.getProperty(factoryClassName);
            result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
        }
        return result;
    }
    catch (IOException ex) {
        throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + "] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex);
    }
}

SpringBoot啟動的時候從類路徑下的
META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,並將這些值作為自動配置類導入到容器中,自動配置類就會生效,最後完成自動配置工作。EnableAutoConfiguration默認在spring-boot-autoconfigure這個包中,如下圖

最終有96個自動配置類被加載並註冊進Spring容器中

J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-xxx.jar中。在這些自動配置類中會通過@ConditionalOnClass等條件註解判斷是否導入了某些依賴包,從而通過@Bean註冊相應的對象進行自動配置。後面我們會有單獨文章講自動配置的內容

 

 

 

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

Elastic Stack 開源的大數據解決方案

目的

本文主要介紹的內容有以下三點:
一. Elastic Stack是什麼以及組成部分
二. Elastic Stack前景以及業務應用
三. Elasticsearch原理(索引方向)
四. Elasticsearch相對薄弱的地方

一、Elastic Stack是什麼以及組成部分

介紹Elastic Stack是什麼,其實只要一句話就可以,就是: 一套完整的大數據處理堆棧,從攝入、轉換到存儲分析、可視化。

它是不同產品的集合,各司其職,形成完整的數據處理鏈,因此Elastic Stack也可以簡稱為BLEK。

Beats 輕量型數據採集器

Logstash 輸入、過濾器和輸出

Elasticsearch 查詢和分析

Kibana 可視化,可自由選擇如何呈現數據

1. Beats – 全品類採集器,搞定所有數據類型

Filebeat(日誌文件):對成百上千、甚至上萬的服務器生成的日誌匯總,可搜索。

Metricbeat(指標): 收集系統和服務指標,CPU 使用率、內存、文件系統、磁盤 IO 和網絡 IO 統計數據。

Packetbeat(網絡數據):網絡數據包分析器,了解應用程序動態。

Heartbeat(運行時間監控):通過主動探測來監測服務的可用性
……
Beats支持許許多多的beat,這裏列的都是比較的常用的beat,了解更多可以點擊鏈接:

2. Logstash – 服務器端數據處理管道

介紹Logstash之前,我們先來看下Linux下常用的幾個命令

cat alldata.txt | awk ‘{print $1}’ | sort | uniq | tee filterdata.txt

只要接觸過Linux同學,應該都知道這幾個命名意思

cat alldata.txt #將alldata.txt的內容輸出到標準設備上
awk ‘{print $1}’ #對上面的內容做截取,只取每一行第一列數據
sort | uniq  #對截取后的內容,進行排序和唯一性操作
tee filterdata.txt #將上面的內容寫到filterdata.txt

上面的幾個簡單的命令就可以看出來,這是對數據進行了常規的處理,用名詞修飾的話就是:數據獲取/輸入、數據清洗、數據過濾、數據寫入/輸出

而Logstash做的也是相同的事(看下圖)。

將系統的日誌文件、應用日誌文件、系統指標等數據,輸入到Input,再通過數據清洗以及過濾,輸入到存儲設備中,這裏當然是輸入到Elasticsearch

3. Elasticsearch – 分佈式文檔存儲、RESTful風格的搜索和數據分析引擎

Elasticsearch主要也是最原始的功能就是搜索和分析功能。這裏就簡單說一下,下面講原理的時候會着重講到Elasticsearch

搜索:全文搜索,完整的信息源轉化為計算機可以識別、處理的信息單元形成的數據集合 。

分析:相關度,搜索所有內容,找到所需的具體信息(詞頻或熱度等對結果排序)

4. Kibana- 可視化

可視化看下圖(來源官網)便知

可以對日誌分析、業務分析等做可視化

現在從總體上來了解下,在心中對Elastic Stack有個清楚的認知(下圖)。

二、Elastic Stack前景以及業務應用

1. DB-Engines 排名

Elasticsearch是Elastic Stack核心,由圖可以看出在搜索領域Elasticsearch暫時沒有對手。

2. ES社區

ES中文社區也是相當活躍的,會定期做一下分享,都是大公司的寶貴經驗,值得參考。

3. 2018年攜程的使用情況(讓我們看看能處理多大的數據)

集群數量是94個,最小的集群一般是3個節點。全部節點數量大概700+。

最大的一個集群是做日誌分析的,其中數據節點330個,最高峰一天產生1600億文檔,寫入值300w/s。

現在有2.5萬億文檔,大概是幾個PB的量

三、Elasticsearch(ES)原理

因為篇目有限,本篇只介紹ES的索引原理。

ES為什麼可以做全文搜索,主要就是用了倒排索引,先來看下面的一張圖

看圖可以簡單的理解倒排索引就是:關鍵字 + 頁碼

對倒排索引有個基本的認識后,下面來做個簡單的數據例子。

現在對Name做到排索引,記住:關鍵字 + ID(頁碼)。

對Age做到排索引。

對Intersets做到排索引。

現在搜索Age等於18的,通過倒排索引就可以快速得到1和3的id,再通過id就可以得到具體數據,看,這樣是不是快的狠。

如果是用Mysql等關係數據庫,現在有十多億數據(大數據嘛),就要一條一條的掃描下去找id,效率可想而知。而用倒排索引,找到所有的id就輕輕鬆鬆了。

在ES中,關鍵詞叫Term,頁碼叫Posting List。

但這樣就行了嗎? 如果Name有上億個Term,要找最後一個Term,效率豈不是還是很低?

再來看Name的倒排索引,你會發現,將Armani放在了第一個,Tyloo放在了第三個,可以看出來,對Term做了簡單的排序。雖然簡單,但很實用。這樣查找Term就可以用二分查找法來查找了,將複雜度由n變成了logn。

在ES中,這叫Term Dictionary。

到這裏,再來想想MySQL的b+tree, 你有沒有發現原理是差不多的,那為什麼說ES搜索比MySQL快很多,究竟快在哪裡? 接下來再看。

有一種數據結構叫Trie樹,又稱前綴樹或字典樹,是一種有序樹。這種數據結構的好處就是可以壓縮前綴和提高查詢數據。

現在有這麼一組Term: apps, apple, apply, appear, back, backup, base, bear,用Trie樹表示如下圖。

通過線路路徑字符連接就可以得到完成的Term,並且合用了前綴,比如apps, apple, apply, appear合用了app路徑,節省了大量空間。

這個時候再來找base單詞,立即就可以排除了a字符開頭的單詞,比Term Dictionary快了不知多少。

在ES中,這叫Term Index

現在我們再從整體看下ES的索引

先通過Trie樹快速定位block(相當於頁碼), 再到Term Dictionary 做二分查找,得到Posting List。

索引優化

ES是為了大數據而生的,這意味着ES要處理大量的數據,它的Term數據量也是不可想象的。比如一篇文章,要做全文索引,就會對全篇的內容做分詞,會產生大量的Term,而ES查詢的時候,這些Term肯定要放在內存裏面的。

雖然Trie樹對前綴做了壓縮,但在大量Term面前還是不夠,會佔用大量的內存使用,於是就有ES對Trie樹進一步演化。

FST(Finite State Transducer )確定無環有限狀態轉移器 (看下圖)

可以看appear、bear 對共同的後綴做了壓縮。

Posting List磁盤壓縮

假設有一億的用戶數據,現在對性別做搜索,而性別無非兩種,可能”男”就有五千萬之多,按int4個字節存儲,就要消耗50M左右的磁盤空間,而這僅僅是其中一個Term。

那麼面對成千上萬的Term,ES究竟是怎麼存儲的呢?接下來,就來看看ES的壓縮方法。

Frame Of Reference (FOR) 增量編碼壓縮,將大數變小數,按字節存儲

只要能把握“增量,大數變小數,按字節存儲”這幾個關鍵詞,這個算法就很好理解,現在來具體看看。

現在有一組Posting List:[60, 150, 300,310, 315, 340], 按正常的int型存儲,size = 6 * 4(24)個字節。

  1. 按增量存儲:60 + 90(150)+ 150(300) + 10(310) + 5(315)+ 25(340),也就是[60, 90, 150, 10, 5, 25],這樣就將大數變成了小數。

  2. 切分成不同的block:[60, 90, 150]、[10, 5, 25],為什麼要切分,下面講。

  3. 按字節存儲:對於[60, 90, 150]這組block,究竟怎麼按字節存儲,其實很簡單,就是找其中最大的一個值,看X個比特能表示這個最大的數,那麼剩下的數也用X個比特表示(切分,可以盡可能的壓縮空間)。

[60, 90, 150]最大數150 < 2^8 = 256,也就是這組每個數都用8個比特表示,也就是 3*8 = 24個比特,再除以8,也就是3個字節存在,再加上一個8的標識位(說明每個數是8個比特存儲),佔用一個字節,一共4個字節。

[10, 5, 25]最大數25 < 2^5 = 32,每個數用5個比特表示,3*5=15比特,除以8,大約2個字節,加上5的標識位,一共3個字節。

那麼總體size = 4 + 3(7)個字節,相當於24個字節,大大壓縮了空間。

再看下圖表示

Posting List內存壓縮

同學們應該都知道越複雜的算法消耗的CPU性能就越大,比如常見的https,第一次交互會用非對稱密碼來驗證,驗證通過後就轉變成了對稱密碼驗證,FOR同樣如此,那麼ES是用什麼算法壓縮內存中的Posting List呢?

Roaring Bitmaps 壓縮位圖索引

Roaring Bitmaps 涉及到兩種數據結構 short[] 、bitmap。

short好理解就是2個字節的整型。

bitmap就是用比特表示數據,看下面的例子。

Posting List:[1, 2, 4, 7, 10] -> [1, 1, 0, 1, 0, 0, 1,0, 0, 1],取最大的值10,那麼就用10個比特表示這組Posting List,第1, 2, 4, 7, 10位存在,就將相對應的“位”置為1,其他的為0。

但這種bitmap數據結構有缺陷,看這組Posting List: [1, 3, 100000000] -> [1, 0, 1, 0, 0, 0, …, 0, 0, 1 ],最大數是1億,就要1億的比特表示,這麼算下來,反而消耗了更多的內存。

那如何解決這個問題,其實也很簡單,跟上面一樣,將大數變成小數。

看下圖:

第一步:將每個數除以65536,得到(商,餘數)。

第二步:按照商,分成不同的block,也就是相同的商,放在同一個block裏面,餘數就是這個值在這個block裏面的位置(永遠不會超過65536,餘數嘛)。

第三步:判斷底層block用什麼數據結構存儲數據,如果block裏面的餘數的個數超過4096個,就用short存儲,反之bitmap。

上面那個圖是官網的圖,看下我畫的圖,可能更好理解些。

到這裏,ES的索引原理就講完了,希望大家都能理解。

四、Elasticsearch(ES)相對薄弱的地方

1. 多表關聯

其實ES有一個很重要的特性這裏沒有介紹到,也就是分佈式,每一個節點的數據和,才是整體數據。

這也導致了多表關聯問題,雖然ES裏面也提供了Nested& Join 方法解決這個問題,但這裏還是不建議用。

那這個問題在實際應用中應該如何解決? 其實也很簡單,裝換思路,ES無法解決,就到其他層解決,比如:應用層,用面向對象的架構,拆分查詢。

2. 深度分頁

分佈式架構下,取數據便不是那麼簡單,比如取前1000條數據,如果是10個節點,那麼每個節點都要取1000條,10個節點就是10000條,排序后,返回前1000條,如果是深度分頁就會變的相當的慢。

ES提供的是Scroll + Scroll_after,但這個採取的是緩存的方式,取出10000條后,緩存在內存里,再來翻頁的時候,直接從緩存中取,這就代表着存在實時性問題。

來看看百度是怎麼解決這個問題的。

一樣在應用層解決,翻頁到一定的深度后,禁止翻頁。

3. 更新應用

頻繁更新的應用,用ES會有瓶頸,比如一些遊戲應用,要不斷的更新數據,用ES不是太適合,這個看大家自己的應用情況。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!