日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Spring Boot——开发新一代Spring Java应用

發(fā)布時(shí)間:2025/7/14 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot——开发新一代Spring Java应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Spring官方網(wǎng)站本身使用Spring框架開(kāi)發(fā),隨著功能以及業(yè)務(wù)邏輯的日益復(fù)雜,應(yīng)用伴隨著大量的XML配置文件以及復(fù)雜的Bean依賴關(guān)系。隨著Spring 3.0的發(fā)布,Spring IO團(tuán)隊(duì)逐漸開(kāi)始擺脫XML配置文件,并且在開(kāi)發(fā)過(guò)程中大量使用“約定優(yōu)先配置”(convention over configuration)的思想來(lái)擺脫Spring框架中各類繁復(fù)紛雜的配置(即時(shí)是Java Config)。


Spring Boot正是在這樣的一個(gè)背景下被抽象出來(lái)的開(kāi)發(fā)框架,它本身并不提供Spring框架的核心特性以及擴(kuò)展功能,只是用于快速、敏捷地開(kāi)發(fā)新一代基于Spring框架的應(yīng)用程序。也就是說(shuō),它并不是用來(lái)替代Spring的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開(kāi)發(fā)者體驗(yàn)的工具。同時(shí)它集成了大量常用的第三方庫(kù)配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開(kāi)箱即用(out-of-the-box),大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼,開(kāi)發(fā)者能夠更加專注于業(yè)務(wù)邏輯。


Hello World


傳統(tǒng)基于Spring的Java Web應(yīng)用,需要配置web.xml, applicationContext.xml,將應(yīng)用打成war包放入應(yīng)用服務(wù)器(Tomcat, Jetty等)中并運(yùn)行。如果基于Spring Boot,這一切都將變得簡(jiǎn)單:


以Maven項(xiàng)目為例,首先引入Spring Boot的開(kāi)發(fā)依賴:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.2.5.RELEASE</version> </parent> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> </dependencies>

編寫一個(gè)類包含處理HTTP請(qǐng)求的方法以及一個(gè)main()函數(shù):

@Controller @EnableAutoConfiguration public?class?SampleController?{@RequestMapping("/")@ResponseBodyString?home()?{return?"Hello?World!";}public?static?void?main(String[]?args)?throws?Exception?{SpringApplication.run(SampleController.class,?args);} }

啟動(dòng)main函數(shù)后,在控制臺(tái)中可以發(fā)現(xiàn)啟動(dòng)了一個(gè)Tomcat容器,一個(gè)基于Spring MVC的應(yīng)用也同時(shí)啟動(dòng)起來(lái),這時(shí)訪問(wèn)http://localhost:8080就可以看到Hello World!出現(xiàn)在瀏覽器中了。


Spring Boot初探


在Maven依賴中引入了spring-boot-starter-web,它包含了Spring Boot預(yù)定義的一些Web開(kāi)發(fā)的常用依賴:


spring-web, spring-webmvc Spring WebMvc框架

tomcat-embed-* 內(nèi)嵌Tomcat容器

jackson 處理json數(shù)據(jù)

spring-* Spring框架

spring-boot-autoconfigure Spring Boot提供的自動(dòng)配置功能

Java代碼中沒(méi)有任何配置,和傳統(tǒng)的Spring應(yīng)用相比,多了兩個(gè)我們不認(rèn)識(shí)的符號(hào):


@EnableAutoConfiguration

SpringApplication

它們都是由Spring Boot框架提供。在SpringApplication.run()方法執(zhí)行后,Spring Boot的autoconfigure發(fā)現(xiàn)這是一個(gè)Web應(yīng)用(根據(jù)類路徑上的依賴確定),于是在內(nèi)嵌的Tomcat容器中啟動(dòng)了一個(gè)Spring的應(yīng)用上下文,并且監(jiān)聽(tīng)默認(rèn)的tcp端口8080(默認(rèn)約定)。同時(shí)在Spring Context中根據(jù)默認(rèn)的約定配置了Spring WebMvc:


Servlet容器默認(rèn)的Context路徑是/

DispatherServlet匹配的路徑(servlet-mapping中的url-patterns)是/*

@ComponentScan路徑被默認(rèn)設(shè)置為SampleController的同名package,也就是該package下的所有@Controller ,@Service , @Component, @Repository都會(huì)被實(shí)例化后并加入Spring Context中。

沒(méi)有一行配置代碼、也沒(méi)有web.xml。基于Spring Boot的應(yīng)用在大多數(shù)情況下都不需要我們?nèi)ワ@式地聲明各類配置,而是將最常用的默認(rèn)配置作為約定,在不聲明的情況下也能適應(yīng)大多數(shù)的開(kāi)發(fā)場(chǎng)景。


實(shí)例:數(shù)據(jù)庫(kù)訪問(wèn)


除了最基本的Web框架,另一種非常普遍的開(kāi)發(fā)場(chǎng)景是訪問(wèn)數(shù)據(jù)庫(kù)。在傳統(tǒng)的Spring應(yīng)用中,訪問(wèn)數(shù)據(jù)庫(kù)我們需要配置:


類路徑上添加數(shù)據(jù)庫(kù)訪問(wèn)驅(qū)動(dòng)

實(shí)例化DataSource對(duì)象,指定數(shù)據(jù)庫(kù)url, username, password等信息

注入JdbcTemplate對(duì)象,如果使用Hibernate,Mybatis等框架,還需要進(jìn)一步配置框架信息

在Spring Boot中,上述過(guò)程會(huì)被簡(jiǎn)化。首先在Maven項(xiàng)目依賴中定義:


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-jdbc</artifactId> </dependency> <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId> </dependency>

spring-boot-starter-web-jdbc引入了spring-jdbc依賴,h2是一個(gè)內(nèi)存關(guān)系型數(shù)據(jù)庫(kù)。在引入了這些依賴并啟動(dòng)Spring Boot應(yīng)用程序后,autoconfigure發(fā)現(xiàn)spring-jdbc位于類路徑中,于是:


根據(jù)類路徑上的JDBC驅(qū)動(dòng)類型(這里是h2,預(yù)定義了derby, sqlite, mysql, oracle, sqlserver等等),創(chuàng)建一個(gè)DataSource連接池對(duì)象,本例中的h2是內(nèi)存數(shù)據(jù)庫(kù),無(wú)需任何配置,如果是mysql, oracle等類型的數(shù)據(jù)庫(kù)需要開(kāi)發(fā)者配置相關(guān)信息。

在Spring Context中創(chuàng)建一個(gè)JdbcTemplate對(duì)象(使用DataSource初始化)

接下來(lái)開(kāi)發(fā)者的工作就非常簡(jiǎn)單了,在業(yè)務(wù)邏輯中直接引入JdbcTemplate即可:

@Service public?class?MyService?{@AutowiredJdbcTemplate?jdbcTemplate; }

除了spring-jdbc,Spring Boot還能夠支持JPA,以及各種NoSQL數(shù)據(jù)庫(kù)——包括MongoDB,Redis,全文索引工具elasticsearch, solr等等。


配置


Spring Boot最大的特色是“約定優(yōu)先配置”,大量的默認(rèn)配置對(duì)開(kāi)發(fā)者十分的友好。但是在實(shí)際的應(yīng)用開(kāi)發(fā)過(guò)程中,默認(rèn)配置不可能滿足所有場(chǎng)景,同時(shí)用戶也需要配置一些必須的配置項(xiàng)——例如數(shù)據(jù)庫(kù)連接信息。Spring Boot的配置系統(tǒng)能夠讓開(kāi)發(fā)者快速的覆蓋默認(rèn)約定,同時(shí)支持Properties配置文件和YAML配置文件兩種格式,默認(rèn)情況下Spring Boot加載類路徑上的application.properties或application.yml文件,例如:

spring.datasource.url=jdbc:mysql://localhost/test spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.jdbc.Driver

YAML格式更加簡(jiǎn)潔:


spring:datasource:url:?jdbc:mysql://localhost/testusername:?dbuserpassword:?dbpassdriver-class:?com.mysql.jdbc.Driver

一旦發(fā)現(xiàn)這些信息,Spring Boot就會(huì)根據(jù)它們創(chuàng)建DataSource對(duì)象。另一個(gè)常見(jiàn)的配置場(chǎng)景是Web應(yīng)用服務(wù)器:

#?Server?settings?(ServerProperties) server:port:?8080address:?127.0.0.1sessionTimeout:?30contextPath:?/#?Tomcat?specificstomcat:accessLogEnabled:?falseprotocolHeader:?x-forwarded-protoremoteIpHeader:?x-forwarded-forbasedir:backgroundProcessorDelay:?30?#?secs

通過(guò)port和address可以修改服務(wù)器監(jiān)聽(tīng)的地址和端口,sessionTimeout配置session過(guò)期時(shí)間(再也不用修改web.xml了,因?yàn)樗静淮嬖?#xff09;。同時(shí)如果在生產(chǎn)環(huán)境中使用內(nèi)嵌Tomcat,當(dāng)然希望能夠配置它的日志、線程池等信息,這些現(xiàn)在都可以通過(guò)Spring Boot的屬性文件配置,而不再需要再對(duì)生產(chǎn)環(huán)境中的Tomcat實(shí)例進(jìn)行單獨(dú)的配置管理了。

@EnableAutoCongiguration

從Spring 3.0開(kāi)始,為了替代繁瑣的XML配置,引入了@Enable...注解對(duì)@Configuration類進(jìn)行修飾以達(dá)到和XML配置相同的效果。想必不少開(kāi)發(fā)者已經(jīng)使用過(guò)類似注解:

@EnableTransactionManagement開(kāi)啟Spring事務(wù)管理,相當(dāng)于XMl中的<tx:*> @EnableWebMvc使用Spring?MVC框架的一些默認(rèn)配置 @EnableScheduling會(huì)初始化一個(gè)Scheduler用于執(zhí)行定時(shí)任務(wù)和異步任務(wù)

Spring Boot提供的@EnableAutoCongiguration似乎功能更加強(qiáng)大,一旦加上,上述所有的配置似乎都被包含進(jìn)來(lái)而無(wú)需開(kāi)發(fā)者顯式聲明。它究竟是如何做到的呢,先看看它的定義:

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({?EnableAutoConfigurationImportSelector.class,AutoConfigurationPackages.Registrar.class?}) public?@interface?EnableAutoConfiguration?{/***?Exclude?specific?auto-configuration?classes?such?that?they?will?never?be?applied.*/Class<?>[]?exclude()?default?{}; } EnableAutoConfigurationImportSelector使用的是spring-core模塊中的SpringFactoriesLoader#loadFactoryNames()方法,它的作用是在類路徑上掃描META-INF/spring.factories文件中定義的類: #?Initializers org.springframework.context.ApplicationContextInitializer=\ org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer #?Auto?Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.MongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JmsTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\ org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\ org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\ org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\ org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\ org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\ org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration

實(shí)際上這就是Spring Boot會(huì)自動(dòng)配置的一些對(duì)象,例如前面提到的Web框架由EmbeddedServletContainerAutoConfiguration, DispatcherServletAutoConfiguration, ServerPropertiesAutoConfiguration等配置完成,而DataSource的自動(dòng)配置則是由DataSourceAutoConfiguration完成。現(xiàn)在我們以Mongo的配置MongoAutoConfiguration為例,來(lái)探索Spring Boot是如何完成這些配置的:

@Configuration @ConditionalOnClass(Mongo.class) @EnableConfigurationProperties(MongoProperties.class) public?class?MongoAutoConfiguration?{@Autowiredprivate?MongoProperties?properties;private?Mongo?mongo;@PreDestroypublic?void?close()?throws?UnknownHostException?{if?(this.mongo?!=?null)?{this.mongo.close();}}@Bean@ConditionalOnMissingBeanpublic?Mongo?mongo()?throws?UnknownHostException?{this.mongo?=?this.properties.createMongoClient();return?this.mongo;} }

首先這是一個(gè)Spring的配置@Configuration,它定義了我們?cè)L問(wèn)Mongo需要的@Bean,如果這個(gè)@Configuration被Spring Context掃描到,那么Context中自然也就有兩個(gè)一個(gè)Mongo對(duì)象能夠直接為開(kāi)發(fā)者所用。


但是注意到其它幾個(gè)Spring注解:

@ConditionOnClass表明該@Configuration僅僅在一定條件下才會(huì)被加載,這里的條件是Mongo.class位于類路徑上 @EnableConfigurationProperties將Spring?Boot的配置文件(application.properties)中的spring.data.mongodb.*屬性映射為MongoProperties并注入到MongoAutoConfiguration中。 @ConditionalOnMissingBean說(shuō)明Spring?Boot僅僅在當(dāng)前上下文中不存在Mongo對(duì)象時(shí),才會(huì)實(shí)例化一個(gè)Bean。這個(gè)邏輯也體現(xiàn)了Spring?Boot的另外一個(gè)特性——自定義的Bean優(yōu)先于框架的默認(rèn)配置,我們?nèi)绻@式的在業(yè)務(wù)代碼中定義了一個(gè)Mongo對(duì)象,那么Spring?Boot就不再創(chuàng)建。 接下來(lái)看一看MongoProperties: @ConfigurationProperties(prefix?=?"spring.data.mongodb") public?class?MongoProperties?{private?String?host;private?int?port?=?DBPort.PORT;private?String?uri?=?"mongodb://localhost/test";private?String?database;//?...?getters/?setters?omitted }

顯然,它就是以spring.data.mongodb作為前綴的屬性,然后通過(guò)名字直接映射為對(duì)象的屬性,同時(shí)還包含了一些默認(rèn)值。如果不配置,那么mongo.uri就是mongodb://localhost/test。


Production特性


從前面的例子可以看出,Spring Boot能夠非常快速的做出一些原型應(yīng)用,但是它同樣可以被用于生產(chǎn)環(huán)境。為了添加生產(chǎn)環(huán)境特性支持,需要在Maven依賴中引入:

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

加入actuator依賴后,應(yīng)用啟動(dòng)后會(huì)創(chuàng)建一些基于Web的Endpoint:

/autoconfig,用來(lái)查看Spring?Boot的框架自動(dòng)配置信息,哪些被自動(dòng)配置,哪些沒(méi)有,原因是什么。 /beans,顯示應(yīng)用上下文的Bean列表 /dump,顯示線程dump信息 /health,應(yīng)用健康狀況檢查 /metrics /shutdown,?默認(rèn)沒(méi)有打開(kāi) /trace

總結(jié)


Spring Boot是新一代Spring應(yīng)用的開(kāi)發(fā)框架,它能夠快速的進(jìn)行應(yīng)用開(kāi)發(fā),讓人忘記傳統(tǒng)的繁瑣配置,更加專注于業(yè)務(wù)邏輯。現(xiàn)在Spring官方文檔中所有的Guide中的例子都是使用Spring Boot進(jìn)行構(gòu)建,這也是一個(gè)學(xué)習(xí)Spring, Spring Boot非常好的地方。如果想進(jìn)一步深度學(xué)習(xí)Spring Boot,可以參考:


Spring Boot Reference

spring.io網(wǎng)站源碼


引用自:http://www.tianmaying.com/tutorial/spring-boot-overview?

轉(zhuǎn)載于:https://my.oschina.net/91jason/blog/644429

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Spring Boot——开发新一代Spring Java应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一级生活片 | 中文精品久久久久人妻不卡 | 亚洲大片在线观看 | 可以直接在线观看的av | 三级黄毛片| 草草久久久无码国产专区 | www.超碰| 中国免费观看的视频 | 日本在线视频不卡 | 成人www视频 | 日韩视频专区 | 水多多在线| 国产免费一级视频 | 欧美午夜寂寞影院 | 国产成人无码精品久久久久久 | www.亚洲综合| 99久久久无码国产精品免费 | 91免费在线播放 | 韩国av一区 | wwwyoujizz日本 | av永久在线 | 波多野结衣免费视频观看 | 超碰cc | www.久久av | 香蕉久久av | 香蕉视频免费在线 | 黄色片视频免费观看 | 亚洲视频二区 | 五级黄高潮片90分钟视频 | 精品久久久久久久久久久久久 | 草草影院最新地址 | 巨胸挤奶视频www网站 | 国产一级黄色大片 | 欧美精品人妻一区二区 | 91精品国产高清91久久久久久 | 一级片视频免费看 | 久久99热精品 | 免费超爽大片黄 | 强公把我次次高潮hd | 九一在线观看免费高清视频 | 污片免费在线观看 | 欧洲精品码一区二区三区免费看 | av 一区二区三区 | 九九热精品在线 | 在线观看av网 | 久久精品视频免费播放 | 色哟哟视频在线 | 一路向西在线看 | 精品久久中文 | 麻豆电影网站 | 521a人成v香蕉网站 | 16—17女人毛片 | 另类激情亚洲 | 日韩欧美操 | 午夜视频福利网站 | 九九视频免费在线观看 | 午夜婷婷丁香 | 国产在线xx | 天堂av在线中文 | 日韩午夜激情 | 日本视频色 | 在线观看视频亚洲 | 国产精品入口66mio | 91免费视频免费版 | 国产精品人人爽人人爽 | 亚洲色欲色欲www在线观看 | 欧美图片一区二区三区 | 欧日韩一区二区三区 | 少妇高潮惨叫久久久久 | 天天综合网久久 | 久草影视在线观看 | 免费观看的黄色网址 | 久久看片 | 秋霞一区二区三区 | 亚洲视频在线免费 | 久久99深爱久久99精品 | 国产在线h | 91香蕉嫩草 | 1769国产精品视频 | 国产亚洲一区二区三区在线观看 | 国产性精品 | 美女的隐私免费看 | 九色91蝌蚪 | 日韩免费在线观看 | 国产九九九九九 | 久久精品一区二区免费播放 | 精品免费视频一区二区 | 亚洲综合国产精品 | 秋霞欧美在线观看 | 日韩精品在线视频观看 | 欧美另类视频 | 日韩黄色在线视频 | 在线观看福利片 | 久久精品动漫 | 欧美草比视频 | 人妻91麻豆一区二区三区 | 国语av在线 | 毛片网页 | 日韩视频免费观看高清 |