Spring Boot入門系列一

Spring Boot特點(diǎn)

1. 創(chuàng)建獨(dú)立的Spring應(yīng)用程序

2. 嵌入的Tomcat塘淑,無需部署WAR文件(此處需要注意新建maven項(xiàng)目后不可手動(dòng)配置tomcat

3. 簡(jiǎn)化Maven配置

4. 自動(dòng)配置Spring

5. 提供生產(chǎn)就緒型功能,如指標(biāo)玩荠,健康檢查和外部配置

6. 絕對(duì)沒有代碼生成和對(duì)XML沒有要求配置

從最根本上來講,Spring Boot就是一些庫(kù)的集合贼邓,它能夠被任意項(xiàng)目的構(gòu)建系統(tǒng)所使用姨蟋。簡(jiǎn)便起見,該框架也提供了命令行界面立帖,它可以用來運(yùn)行和測(cè)試Boot應(yīng)用∮蒲猓框架的發(fā)布版本晓勇,包括集成的CLI(命令行界面),可以在Spring倉(cāng)庫(kù)中手動(dòng)下載和安裝。一種更為簡(jiǎn)便的方式是使用Groovy環(huán)境管理器(Groovy enVironment Manager娘汞,GVM)显拜,它會(huì)處理Boot版本的安裝和管理疲恢。Boot及其CLI可以通過GVM的命令行g(shù)vm install springboot進(jìn)行安裝。在OS X上安裝Boot可以使用Homebrew包管理器铝噩。為了完成安裝,首先要使用brew tap pivotal/tap切換到Pivotal倉(cāng)庫(kù)中窿克,然后執(zhí)行brew install springboot命令骏庸。

要進(jìn)行打包和分發(fā)的工程會(huì)依賴于像MavenGradle這樣的構(gòu)建系統(tǒng)。為了簡(jiǎn)化依賴圖年叮,Boot的功能是模塊化的具被,通過導(dǎo)入Boot所謂的“starter”模塊,可以將許多的依賴添加到工程之中只损。為了更容易地管理依賴版本和使用默認(rèn)配置一姿,框架提供了一個(gè)parent POM,工程可以繼承它跃惫。

==============================Spring Boot項(xiàng)目最最基礎(chǔ)實(shí)踐==================================

1叮叹、新建maven項(xiàng)目。(正常建立即可爆存,此處我建立的項(xiàng)目為mavenboot)

2蛉顽、編寫pom.xml文件。引入<parent>屬性用于繼承Spring Boot

pom.xml文件

3终蒂、編寫Application蜂林,此處筆者放在java/com/mm/mavenboot包下面。

Application.class

4拇泣、編寫Example.class ?作為Controller

Example.class

5噪叙、啟動(dòng)項(xiàng)目。此時(shí)如果maven項(xiàng)目有紅叉霉翔,只需要右鍵項(xiàng)目→Maven→Update Project

此處需要注意不要在Performance中的Project Facts中設(shè)置Dynamic Web Modul中設(shè)置runtime Tomcat睁蕾;但需要注意此處的jdk是否與自己當(dāng)前環(huán)境匹配。

====================================報(bào)錯(cuò)信息處理 ?1========================================

2017-08-30 11:34:33.681 ERROR 4648 --- [? ? ? ? ? main] o.s.boot.SpringApplication? ? ? ? ? ? ? : Application startup failedjava.lang.UnsupportedClassVersionError: javax/annotation/ManagedBean : Unsupported major.minor version 51.0at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.6.0_29]at java.lang.ClassLoader.defineClassCond(Unknown Source) ~[na:1.6.0_29]at java.lang.ClassLoader.defineClass(Unknown Source) ~[na:1.6.0_29]at java.security.SecureClassLoader.defineClass(Unknown Source) ~[na:1.6.0_29]at java.net.URLClassLoader.defineClass(Unknown Source) ~[na:1.6.0_29]at java.net.URLClassLoader.access$000(Unknown Source) ~[na:1.6.0_29]at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.6.0_29]at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_29]at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.6.0_29]at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.6.0_29]at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.6.0_29]at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.6.0_29]at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) ~[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.registerDefaultFilters(ClassPathScanningCandidateComponentProvider.java:188) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.(ClassPathBeanDefinitionScanner.java:164) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.(ClassPathBeanDefinitionScanner.java:138) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.(ClassPathBeanDefinitionScanner.java:111) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.(ClassPathBeanDefinitionScanner.java:83) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]at org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:62) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0_29]

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.6.0_29]

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.6.0_29]

at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.6.0_29]

at java.lang.Class.newInstance0(Unknown Source) ~[na:1.6.0_29]

at java.lang.Class.newInstance(Unknown Source) ~[na:1.6.0_29]

at org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:77) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]

at org.springframework.boot.SpringApplication.createApplicationContext(SpringApplication.java:529) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:299) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

at com.mm.mavenboot.Application.main(Application.java:19) [classes/:na]

此處報(bào)錯(cuò)是因?yàn)閖dk版本不對(duì)應(yīng)债朵。我的Eclipse默認(rèn)jdk為1.7子眶,但是項(xiàng)目設(shè)置的為1.6.只需要修改jdk為匹配即可。

手動(dòng)修改jdk

但是上述這種方法治標(biāo)不治本序芦,我們可以在pom.xml中強(qiáng)制指定臭杰。

在pom.xml中強(qiáng)制指定jdk

====================================報(bào)錯(cuò)信息處理 ?2========================================

2016-05-16 12:03:37.526 ERROR [restartedMain][SpringApplication.java:827] - Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at com.lingyu.GameServer.main(GameServer.java:17) [classes/:?]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_73]

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_73]

at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_73]

at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.3.5.RELEASE.jar:1.3.5.RELEASE]

Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

... 13 more

這個(gè)問題的原因就出在,加這3個(gè)注解的類 @Configuration,@ServletComponentScan,@EnableAutoConfiguration 和 SpringApplication.run(GameServer.class, args); 中的.class類不是同一個(gè)類的問題谚中,保持一致就好了渴杆。注解加在哪寥枝,run方法中傳入的class就是誰。如同上面的Example類磁奖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囊拜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子比搭,更是在濱河造成了極大的恐慌冠跷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件身诺,死亡現(xiàn)場(chǎng)離奇詭異蜜托,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戚长,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門盗冷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人同廉,你說我怎么就攤上這事仪糖。” “怎么了迫肖?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锅劝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蟆湖,道長(zhǎng)故爵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任隅津,我火速辦了婚禮诬垂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伦仍。我一直安慰自己结窘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布充蓝。 她就那樣靜靜地躺著隧枫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谓苟。 梳的紋絲不亂的頭發(fā)上官脓,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音涝焙,去河邊找鬼卑笨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仑撞,可吹牛的內(nèi)容都是我干的湾趾。 我是一名探鬼主播芭商,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搀缠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起近迁,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤艺普,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鉴竭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歧譬,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年搏存,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑰步。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璧眠,死狀恐怖缩焦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情责静,我是刑警寧澤袁滥,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站灾螃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腰鬼。R本人自食惡果不足惜嵌赠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熄赡。 院中可真熱鬧,春花似錦、人聲如沸掖肋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箍铲。三九已至膘融,卻和暖如春岛都,著一層夾襖步出監(jiān)牢的瞬間择份,已是汗流浹背剩燥。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赁项,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓账阻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泽本。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淘太,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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