Springboot項(xiàng)目的創(chuàng)建和配置詳細(xì)介紹

Spring Boot提供了一種新的編程范式侠驯,能在最小的阻力下開(kāi)發(fā)Spring應(yīng)用程序,可以更加敏捷地開(kāi)發(fā)Spring應(yīng)用程序,專(zhuān)注于應(yīng)用程序的功能奕巍,不用在Spring的配置上多花功夫陵霉,甚至完全不用配置。

Springboot最重要的是以下四個(gè)核心:

  1. 自動(dòng)配置:針對(duì)很多Spring應(yīng)用程序常見(jiàn)的應(yīng)用功能伍绳,Spring Boot能自動(dòng)提供相關(guān)配置踊挠。

  2. 起步依賴(lài):告訴Spring Boot需要什么功能,它就能引入需要的庫(kù)。起步依賴(lài)其實(shí)就是特殊的Maven依賴(lài)和Gradle依賴(lài)效床,利用了傳遞依賴(lài)解析睹酌,把常用庫(kù)聚合在一起,組成了幾個(gè)為特定功能而定制的依賴(lài)剩檀。

  3. 命令行界面:這是Spring Boot的可選特性憋沿,借此你只需寫(xiě)代碼就能完成完整的應(yīng)用程序,無(wú)需傳統(tǒng)項(xiàng)目構(gòu)建沪猴。

  4. Actuator:讓你能夠深入運(yùn)行中的Spring Boot應(yīng)用程序辐啄。Actuator提供在運(yùn)行時(shí)檢視應(yīng)用程序內(nèi)部情況的能力。安裝了Actuator就能窺探應(yīng)用程序的內(nèi)部情況运嗜,包括如下細(xì)節(jié):

  • Spring應(yīng)用程序上下文里配置的Bean

  • Spring Boot的自動(dòng)配置做的決策

  • 應(yīng)用程序取到的環(huán)境變量壶辜、系統(tǒng)屬性、配置屬性和命令行參數(shù)

  • 應(yīng)用程序里線程的當(dāng)前狀態(tài)

  • 應(yīng)用程序最近處理過(guò)的HTTP請(qǐng)求的追蹤情況

  • 各種和內(nèi)存用量担租、垃圾回收砸民、Web請(qǐng)求以及數(shù)據(jù)源用量相關(guān)的指標(biāo)


創(chuàng)建Spring Boot 項(xiàng)目


1、使用 Spring Initializr 創(chuàng)建 Springboot 項(xiàng)目奋救。


Spring Initializr有幾種用法:

  • 通過(guò)Web界面使用岭参。

  • 通過(guò)Spring Tool Suite使用。

  • 通過(guò)IntelliJ IDEA使用尝艘。

  • 使用Spring Boot CLI使用


本人常用的通過(guò)官網(wǎng)web界面創(chuàng)建和IDEA創(chuàng)建演侯,這里介紹這種方式。


(1)背亥、通過(guò)官網(wǎng)web界面創(chuàng)建


(a)秒际、瀏覽器打開(kāi)start.spring.io,如下圖:


左側(cè)根據(jù)你需要選擇項(xiàng)目類(lèi)型隘梨、編程語(yǔ)言程癌、Springboot版本、打包方式轴猎、Java版本嵌莉,輸入項(xiàng)目信息,右側(cè)還可以選擇需要的依賴(lài)捻脖,下面有三個(gè)按鈕GENERATE锐峭、EXPLORE、SHARE可婶。點(diǎn)擊GENERAE直接下載沿癞,點(diǎn)擊EXPLORE彈出一個(gè)頁(yè)面可以展示生成的代碼,再點(diǎn)擊download進(jìn)行下載矛渴。SHARE可以復(fù)制創(chuàng)建springboot的路徑椎扬。


(b)惫搏、將下載的壓縮包解壓到計(jì)算機(jī)中,這就是Springboot最基本的項(xiàng)目架構(gòu)了蚕涤。


(2)筐赔、IDEA創(chuàng)建Springboot項(xiàng)目


(a)、打開(kāi)IDEA揖铜,依次點(diǎn)擊File-->New-->project茴丰,出現(xiàn)如下界面:


紅色方框里的地址是不是和上一種方式的地址一樣?其實(shí)IDEA創(chuàng)建本質(zhì)上也和上一樣的天吓,都是從這個(gè)網(wǎng)址創(chuàng)建贿肩,不過(guò)IDEA自動(dòng)幫我們做了。


(b)龄寞、點(diǎn)擊Next出現(xiàn)如下界面汰规,也和上一種方式類(lèi)似,輸入項(xiàng)目信息萄焦,選擇項(xiàng)目類(lèi)型控轿,Java版本冤竹,打包方式等拂封。


(c)、繼續(xù)點(diǎn)擊Next出現(xiàn)如下界面鹦蠕,是不是也很熟悉冒签,這里選擇依賴(lài)、springboot版本钟病。


(d)萧恕、繼續(xù)點(diǎn)擊Next出現(xiàn)如界面,輸入項(xiàng)目名稱(chēng)肠阱,選擇項(xiàng)目路徑票唆,點(diǎn)擊Finish完成創(chuàng)建。


這兩種方式是使用Spring Initializr 創(chuàng)建Springboot項(xiàng)目屹徘,Springboot也是一種Maven項(xiàng)目走趋,還有一種就是創(chuàng)建Maven項(xiàng)目的方式進(jìn)行創(chuàng)建。


2噪伊、Maven創(chuàng)建Springboot項(xiàng)目


先創(chuàng)建Maven項(xiàng)目再將Springboot特有的依賴(lài)加入到pom中


在包根目錄下創(chuàng)建一個(gè)帶@SpringBootApplication注解的main方法類(lèi)簿煌。


自動(dòng)配置


@SpringBootApplication注解的類(lèi)在Spring Boot應(yīng)用程序里有兩個(gè)作用:配置和啟動(dòng)引導(dǎo)。@SpringBootApplication 開(kāi)啟了Spring的組件掃描和Spring Boot的自動(dòng)配置功能鉴吹。實(shí)際上姨伟, @SpringBootApplication 將三個(gè)有用的注解組合在了一起:

  • Spring的 @Configuration :標(biāo)明該類(lèi)使用Spring基于Java的配置。

  • Spring的 @ComponentScan :?jiǎn)⒂媒M件掃描豆励,這樣你寫(xiě)的Web控制器類(lèi)和其他組件才能被自動(dòng)發(fā)現(xiàn)并注冊(cè)為Spring應(yīng)用程序上下文里的Bean夺荒。

  • Spring Boot 的 @EnableAutoConfiguration : 這 個(gè) 不 起 眼 的 小 注 解 也 可 以 稱(chēng) 為@Abracadabra,就是這一行配置開(kāi)啟了Spring Boot自動(dòng)配置的魔力,讓你不用再寫(xiě)成篇的配置了技扼。


Spring 4.0引入條件化配置在孝,條件化配置允許配置存在于應(yīng)用程序中,但在滿足某些特定條件之前都忽略這個(gè)配置淮摔。Spring Boot運(yùn)用條件化配置的方法是私沮,定義多個(gè)特殊的條件化注解,并將它們用到配置類(lèi)上和橙。這些條件化配置類(lèi)構(gòu)成了Springboot的自動(dòng)配置仔燕。


自動(dòng)配置中使用的條件化注解:

  • @ConditionalOnBean ? ? 配置了某個(gè)特定Bean

  • @ConditionalOnMissingBean ? ? 沒(méi)有配置特定的Bean

  • @ConditionalOnClass ? ? ? ?Classpath里有指定的類(lèi)

  • @ConditionalOnMissingClass ? ? ?Classpath里缺少指定的類(lèi)

  • @ConditionalOnExpression ? ? ?給定的Spring Expression Language(SpEL)表達(dá)式計(jì)算結(jié)果為 true

  • @ConditionalOnJava ? ? ? ? Java的版本匹配特定值或者一個(gè)范圍值

  • @ConditionalOnJndi ? ? ? ?參數(shù)中給定的JNDI位置必須存在一個(gè),如果沒(méi)有給參數(shù)魔招,則要有JNDI ?InitialContext

  • @ConditionalOnProperty ? ? ? 指定的配置屬性要有一個(gè)明確的值

  • @ConditionalOnResource ? ? ?Classpath里有指定的資源

  • @ConditionalOnWebApplication ? ? ? 這是一個(gè)Web應(yīng)用程序

  • @ConditionalOnNotWebApplication ? ?這不是一個(gè)Web應(yīng)用程序


自定義配置


springboot可以使用兩種影響自動(dòng)配置的方式晰搀,使用顯式配置進(jìn)行覆蓋和使用屬性進(jìn)行精細(xì)化配置。


覆蓋 Spring Boot 自動(dòng)配置


大多數(shù)情況下办斑,自動(dòng)配置的Bean剛好能滿足你的需要外恕,不需要去覆蓋它們。但某些情況下乡翅,Spring Boot在自動(dòng)配置時(shí)還不能很好地進(jìn)行推斷鳞疲。我們可以在了解自動(dòng)配置提供了什么之后,我們?cè)賮?lái)覆蓋基礎(chǔ)的安全配置蠕蚜,以滿足特定的場(chǎng)景需求尚洽。


1、創(chuàng)建自定義的配置


覆蓋自動(dòng)配置很簡(jiǎn)單靶累,就當(dāng)自動(dòng)配置不存在腺毫,直接顯式地寫(xiě)一段配置。這段顯式配置的形式不限挣柬,Spring支持的XML和Groovy形式配置都可以潮酒。Spring Boot會(huì)發(fā)現(xiàn)你的配置,隨后降低自動(dòng)配置的優(yōu)先級(jí)邪蛔,以你的配置為準(zhǔn)急黎。


2、通過(guò)屬性文件外置配置


Spring Boot應(yīng)用程序有多種設(shè)置途徑店溢。Spring Boot能從多種屬性源獲得屬性叁熔,包括


如下幾處。


(1) 命令行參數(shù)


(2) ?java:comp/env 里的JNDI屬性


(3) JVM系統(tǒng)屬性


(4) 操作系統(tǒng)環(huán)境變量


(5) 隨機(jī)生成的帶 random.* 前綴的屬性(在設(shè)置其他屬性時(shí)床牧,可以引用它們荣回,比如 ${random.long} )


(6) 應(yīng)用程序以外的application.properties或者appliaction.yml文件


(7) 打包在應(yīng)用程序內(nèi)的application.properties或者appliaction.yml文件


(8) 通過(guò) @PropertySource 標(biāo)注的屬性源


(9) 默認(rèn)屬性


這個(gè)列表按照優(yōu)先級(jí)排序,也就是說(shuō)戈咳,任何在高優(yōu)先級(jí)屬性源里設(shè)置的屬性都會(huì)覆蓋低優(yōu)先級(jí)的相同屬性


application.properties和application.yml文件能放在以下四個(gè)位置心软。


(1) 外置壕吹,在相對(duì)于應(yīng)用程序運(yùn)行目錄的/config子目錄里。


(2) 外置删铃,在應(yīng)用程序運(yùn)行的目錄里耳贬。


(3) 內(nèi)置,在config包內(nèi)猎唁。


(4) 內(nèi)置咒劲,在Classpath根目錄。


這個(gè)列表按照優(yōu)先級(jí)排序诫隅,高優(yōu)先級(jí)位置的配置會(huì)覆蓋低優(yōu)先級(jí)位置的配置腐魂。


自動(dòng)配置微調(diào)


springboot有300多個(gè)屬性可以用來(lái)微調(diào)Spring Boot應(yīng)用程序里的Bean。下面列舉幾個(gè)例子:


1逐纬、禁用模板緩存


spring.thymeleaf.cache(thymeleaf模板)


spring.freemarker.cache (Freemarker)


spring.groovy.template.cache (Groovy模板)


spring.velocity.cache (Velocity)


默認(rèn)情況下蛔屹,這些屬性都為 true ,也就是開(kāi)啟緩存豁生。將它們?cè)O(shè)置為 false 即可禁用緩存兔毒。


2、配置嵌入式服務(wù)器


springboot內(nèi)置服務(wù)器(Tomcat)甸箱,運(yùn)行Spring Boot應(yīng)用程序時(shí)育叁,應(yīng)用程序會(huì)啟動(dòng)一個(gè)嵌入式的服務(wù)器(默認(rèn)是Tomcat),監(jiān)聽(tīng)8080端口摇肌。


server.port(配置端口)


server.ssl.key-store(密鑰存儲(chǔ)文件的存放路徑)


server.ssl.key-store-password和server.ssl.key-password(創(chuàng)建秘鑰文件時(shí)給定的密碼)


3擂红、4配置日志


默認(rèn)情況下仪际,Spring Boot會(huì)用Logback來(lái)記錄日志围小,并用 INFO 級(jí)別輸出到控制臺(tái)。如果決定使用Log4j或者Log4j2树碱,那么你只需要修改依賴(lài)肯适,引入對(duì)應(yīng)該日志實(shí)現(xiàn)的起步依賴(lài),同時(shí)排除掉Logback成榜。在配置文件可以配置日志等級(jí)框舔、路徑等信息。


4赎婚、配置數(shù)據(jù)源


通過(guò)屬性配置數(shù)據(jù)庫(kù)的URL和身份信息就可以了刘绣。


5、使用 Profile 進(jìn)行配置


當(dāng)應(yīng)用程序需要部署到不同的運(yùn)行環(huán)境時(shí)挣输,可以使用基于Profile的配置纬凤。Profile是一種條件化配置,基于運(yùn)行時(shí)激活的Profile撩嚼,會(huì)使用或者忽略不同的Bean或配置類(lèi)停士。設(shè)置 spring.profiles.active 屬性就能激活Profile挖帘,任意設(shè)置配置屬性的方式都能用于設(shè)置這個(gè)值。


spring.profiles.active=production


為每個(gè)環(huán)境分別創(chuàng)建配置恋技,使用特定于Profile的屬性文件,如application-{profile}.properties拇舀,application-{profile}.yml。


6蜻底、定制應(yīng)用程序錯(cuò)誤頁(yè)面


Spring Boot自動(dòng)配置的默認(rèn)錯(cuò)誤處理器會(huì)查找名為error的視圖骄崩,如果找不到就用默認(rèn)的白標(biāo)錯(cuò)誤視圖


最簡(jiǎn)單的方法就是創(chuàng)建一個(gè)自定義視圖,讓解析出的視圖名為error薄辅。這一點(diǎn)歸根到底取決于錯(cuò)誤視圖解析時(shí)的視圖解析器刁赖。

  • 實(shí)現(xiàn)了Spring的View接口的Bean,其ID為error(由Spring的 BeanNameViewResolver所解析)长搀。

  • 如果配置了Thymeleaf宇弛,則有名為error.html的Thymeleaf模板。

  • 如果配置了FreeMarker源请,則有名為error.ftl的FreeMarker模板枪芒。

  • 如果配置了Velocity,則有名為error.vm的Velocity模板谁尸。

  • 如果是用JSP視圖舅踪,則有名為error.jsp的JSP模板。


錯(cuò)誤頁(yè)有兩處特別的信息需要呈現(xiàn):錯(cuò)誤的請(qǐng)求路徑和異常消息良蛮。默認(rèn)情況下抽碌,Spring Boot會(huì)為錯(cuò)誤視圖提供如下錯(cuò)誤屬性。

  • timestamp :錯(cuò)誤發(fā)生的時(shí)間决瞳。

  • status :HTTP狀態(tài)碼货徙。

  • error :錯(cuò)誤原因。

  • exception :異常的類(lèi)名皮胡。

  • message :異常消息(如果這個(gè)錯(cuò)誤是由異常引起的)痴颊。

  • errors : BindingResult 異常里的各種錯(cuò)誤(如果這個(gè)錯(cuò)誤是由異常引起的)。

  • trace :異常跟蹤信息(如果這個(gè)錯(cuò)誤是由異常引起的)屡贺。

  • path :錯(cuò)誤發(fā)生時(shí)請(qǐng)求的URL路徑蠢棱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甩栈,隨后出現(xiàn)的幾起案子泻仙,更是在濱河造成了極大的恐慌,老刑警劉巖量没,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玉转,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡允蜈,警方通過(guò)查閱死者的電腦和手機(jī)冤吨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)蒿柳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人漩蟆,你說(shuō)我怎么就攤上這事垒探。” “怎么了怠李?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵圾叼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捺癞,道長(zhǎng)夷蚊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任髓介,我火速辦了婚禮惕鼓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唐础。我一直安慰自己箱歧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布一膨。 她就那樣靜靜地躺著呀邢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豹绪。 梳的紋絲不亂的頭發(fā)上价淌,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音瞒津,去河邊找鬼蝉衣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仲智,可吹牛的內(nèi)容都是我干的买乃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钓辆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肴焊?” 一聲冷哼從身側(cè)響起前联,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娶眷,沒(méi)想到半個(gè)月后似嗤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡届宠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年烁落,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乘粒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伤塌,死狀恐怖灯萍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情每聪,我是刑警寧澤旦棉,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站药薯,受9級(jí)特大地震影響绑洛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜童本,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一真屯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穷娱,春花似錦讨跟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梯刚,卻和暖如春凉馆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亡资。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工澜共, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锥腻。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓嗦董,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瘦黑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子京革,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容