javascript
我们为什么需要 SpringBoot?
作者?|?阿文,責(zé)編 | 郭芮
頭圖 | CSDN 下載自東方IC
出品 | CSDN(ID:CSDNnews)
任何先進(jìn)技術(shù)的產(chǎn)生都不是憑空出現(xiàn)的,SpringBoot 也不例外,SpringBoot 是基于Spring 的基礎(chǔ)上產(chǎn)生的。總所周知,Spring 是一個輕量級的容器,在Java EE 項目中得到廣泛使用,但是Spring復(fù)雜、繁瑣和臃腫的XML配置方式配置使得開發(fā)人員在實際使用過程中變得非常痛苦,尤其是與其他第三方工具進(jìn)行整合時,比如Mybatis等就更會使得配置文件變得異常復(fù)雜和重復(fù)。
比如我們來看一段Spring的配置:
上圖是一段配置數(shù)據(jù)庫以及事務(wù)管理和Mybatis 的配置,我們發(fā)現(xiàn)僅僅是配置文件就非常的多,當(dāng)然這還不是最復(fù)雜的。在這種基礎(chǔ)上,SpringBoot 誕生了。
SpringBoot 的出現(xiàn)給開發(fā)者帶來了新的自動化配置解決方案,使得開發(fā)者能夠基于 SpringBoot 快速創(chuàng)建基于 Spring 生產(chǎn)級的獨立應(yīng)用程序, SpringBoot 中對一些常用的第三方庫提供了默認(rèn)的自動化配置方案,使得開發(fā)者只需要很少的 Spring 配置就能運行完整的 JavaEE 應(yīng)用。由于其擁有了開箱即用的特性以及服務(wù)監(jiān)控方案同時自帶web服務(wù)器且與Spring的另一個主流的Spring Cloud 等服務(wù)治理框架以及kubernetes 等技術(shù)的融合使得開發(fā)人員可以快速的實現(xiàn)微服務(wù)以及服務(wù)的治理、熔斷等,最重要的是你可以完全不需要配置XML,真的是太爽了。
那么,如何入門SpringBoot 呢?本文將帶你了解。
小試牛刀
首先,我們創(chuàng)建一個SpringBoot工程,創(chuàng)建SpringBoot的方法有很多,這里以IDEA 企業(yè)版為例,我們選擇 Spring initalizr 然后創(chuàng)建一個工程。
創(chuàng)建完工程之后,我們打開pom.xml,我們可以看到這段配置:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version><relativePath/>?<!--?lookup?parent?from?repository?--> </parent>spring-boot-starter-parent 是一種特殊的 starter,它提供了一些 maven 默認(rèn)配置,同時還提供了dependency-management ,可以便開發(fā)者在引入其他依賴時不必輸入版本號,方便依賴管理。
SpringBoot 提供的starter 非常多,這些 Starter 要為第三方庫提供自動配置,假如我們要配置一個web項目,則可以在maven 中加入:
?<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>在項目的入口我們可以看到一個DemoApplication,這是整個SpringBoot的入口:
package?com.example.demo;import?org.springframework.boot.SpringApplication; import?org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public?class?DemoApplication?{public?static?void?main(String[]?args)?{SpringApplication.run(DemoApplication.class);}}其中@SpringBootApplication 注解等于如下注解,表示開啟自動配置以及自動掃包:
@EnableAutoConfiguration @ComponentScan其中ComponentScan 會掃描@Service、@Repository、@Component、@Controller、@RestController以及帶@Configuration 注解的類,但是我們?yōu)榱烁奖?#xff0c;通常都是直接在入口加上@SpringBootApplication。
在IDE中,我們運行DemoApplication 這個class 就可以運行SpringBoot 了,此時終端會出現(xiàn)如下信息,我們可以看到 (v2.2.6.RELEASE) 版本號以及Tomcat的端口:
但是此時我們?nèi)ピL問127.0.0.1:8080,會出現(xiàn)404的提醒:
我們可以在項目下新建一個 HelloController:
此時,我們?nèi)ピL問可以看到如下內(nèi)容:
當(dāng)然,更多的時候我們寫完一個應(yīng)用,是需要放到服務(wù)器上去運行的,這個時候我們需要把應(yīng)用進(jìn)行打包,要打包應(yīng)用,我們需要在pom.xml中配置:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build>當(dāng)然,使用idea 創(chuàng)建的SpringBoot 這些都給我們安排的妥妥的,我們只需要在終端輸入如下命令就可以將整個項目進(jìn)行打包:
mvn?package然后我們在終端執(zhí)行:
java?-jar?target/demo-0.0.1-SNAPSHOT.jar就可以運行打包好的項目,如下所示:
定制Banner
當(dāng)SpringBoot 程序啟動之后,我們會看到SpringBoot 的Logo:
但是通常情況下,企業(yè)會將其替換成自己的公司Logo,那么如何定制屬于自己的企業(yè)Logo 呢?
首先,我們要把文件轉(zhuǎn)成TXT文本形式的字體,比如在 http://www.network-science.de/ascii/ 設(shè)置,比如我們設(shè)置一個SpringDemo的字體:
然后在項目的resource目錄下新建一個banner.txt的文件,將生成的文字復(fù)制粘貼進(jìn)去即可:
然后我們重新運行程序就會發(fā)現(xiàn)默認(rèn)的Logo 被替換了:
如果要關(guān)閉也很簡單,只需要在main函數(shù)中,設(shè)置:
SpringApplicationBuilder?builder?=?new?SpringApplicationBuilder(DemoApplication.class); builder.bannerMode(Banner.Mode.OFF).run(args);Web 容器的配置
在SpringBoot 中,我們可以在application.properties 中對web 容器進(jìn)行配置,如下所示:
server.address=127.0.0.1?#?配置地址 server.port=8888?#?配置端口 server.tomcat.basedir=/opt/tmp?#?配置目錄 server.tomcat.uri-encoding=utf-8?#配置編碼 server.tomcat.max-threads=300?#配置最大線程數(shù)在idea 中,會對配置項進(jìn)行智能提示,非常方便:
我們還可以在該文件中配置證書:
server.ssl.key-store=?#配置秘鑰文件名稱 server.ssl.key-alias=?#配置秘鑰別名 server.ssl.key-password=?#?配置證書密碼application.properties 的文件加載順序
SpringBoot 中的application.properties配置文件可以出現(xiàn)在如下4個位置:
項目根目錄下的config 文件夾中
項目的根目錄下
classpath 下的config文件夾下
classpath 下
開發(fā)者也可以自定義這個文件的名稱,只需要在運行時加上spring.config.name=xxx即可:
jar?-jar?xxx.jar?--spring.config.name=xxx也可以知道配置文件所在路徑:
jar?-jar?xxx.jar?--spring.config.location=classpath:/SpringBoot 的配置文件最終都會被加載到Environment中,我們可以通過@Value 注解以及EnvironmentAware 接口來講數(shù)據(jù)注入到屬性上,例如application.properties中的內(nèi)容如下:
book.name=西游記 book.author=六承恩 book.price=66 book.type="古典文學(xué)","四大名著"Book 類的內(nèi)容如下:
@Component @ConfigurationProperties(prefix?=?"book") public?class?Book?{private?String?name;private?String?author;private?Float?price;private?List<String>?type;//getter?省略//seteer?省略@Overridepublic?String?toString()?{return?"Book{"?+"name='"?+?name?+?'\''?+",?author='"?+?author?+?'\''?+",?price="?+?price?+",?type="?+?type?+'}';} }其中ConfigurationProperties 注解中的prefix 屬性描述了要加載配置文件的前綴對應(yīng)的控制器類如下:
@RestController public?class?BookController?{@AutowiredBook?book;@GetMapping("/book")public?String?book(){return?book.toString();} }我們執(zhí)行后訪問可以看到如下內(nèi)容:
除此之外,還支持YAML 配置,我們將application.properties中的內(nèi)容刪除或注釋,然后在resource中新建一個application.yml 文件,內(nèi)容如下,重新運行程序得到的結(jié)果與上面的一樣。
book:name:?西游記author:?六承恩price:?66type:-??古典文學(xué)-?四大名著YAML格式的文件雖然方便,但是無法使用@PropertySource 注解加載YAML文件。
Profile
在實際的開發(fā)過程中,開發(fā)人員需要頻繁的在生產(chǎn)和測試環(huán)境進(jìn)行切換,其中一些配置就需要變動,比如數(shù)據(jù)庫的配置。對此,SpringBoot 提供了@Profile注解,我們可以配置2個配置文件分別代表生產(chǎn)和測試環(huán)境的,在resource中新建application-dev.properties以及application-prod.properties。
然后在main 函數(shù)中配置:
SpringApplicationBuilder?builder?=?new?SpringApplicationBuilder(DemoApplication.class);builder.application().setAdditionalProfiles("prod");builder.run(args);或者在項目啟動時候加上--spring.profiles.active=prod。
同時,歡迎所有開發(fā)者掃描下方二維碼填寫《開發(fā)者與AI大調(diào)查》,只需2分鐘,即可收獲價值299元的“ AI開發(fā)者萬人大會”在線直播門票!
推薦閱讀:小網(wǎng)站的容器化(下):網(wǎng)站容器化的各種姿勢,先跟著擼一波代碼再說! 你知道嗎?其實Oracle直方圖自動統(tǒng)計算法存在這些缺陷!(附驗證步驟) 詳解以太坊虛擬機(jī)(EVM)的數(shù)據(jù)存儲機(jī)制 比特幣當(dāng)贖金,WannaRen勒索病毒二度來襲!平臺抗住日訪問量7億次,研發(fā)品控流程全公開“手把手撕開LeetCode翻譯,扒各種算法套路的褲子”北京四環(huán)堵車引發(fā)的智能交通大構(gòu)想 真香,朕在看了!總結(jié)
以上是生活随笔為你收集整理的我们为什么需要 SpringBoot?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里上市,四大洲8个国家的十位代表敲锣;
- 下一篇: 看完这一篇,你就对 Spring Sec