為什么說 Java 程序員到了必須掌握 Spring Boot 的時候维雇?

現(xiàn)在這么多人熱衷于學習 Spring Boot 之時谆棺,我自己也在思考: Spring Boot 誕生的背景是什么?Spring 企業(yè)又是基于什么樣的考慮創(chuàng)建 Spring Boot? 傳統(tǒng)企業(yè)使用 Spring Boot 會給我們帶來什么樣變革?

帶著這些問題鹃骂,我們一起來了解下 Spring Boot 到底是什么?

Spring 歷史

說起 Spring Boot 我們不得不先了解一下 Spring 這個企業(yè),不僅因為 Spring Boot 來源于 Spirng 大家族罢绽,而且 Spring Boot 的誕生和 Sping 框架的發(fā)展息息相關(guān)畏线。

時間回到2002年,當時正是 Java EE 和 EJB 大行其道的時候有缆,很多知名公司都是采用此技術(shù)方案進行項目開發(fā)象踊。這時候有一個美國的小伙子認為 EJB 太過臃腫,并不是所有的項目都需要使用 EJB 這種大型框架棚壁,應該會有一種更好的方案來解決這個問題杯矩。

為了證明他的想法是正確的,于2002年10月甚至寫了一本書《 Expert One-on-One J2EE 》袖外,介紹了當時 Java 企業(yè)應用程序開發(fā)的情況史隆,并指出了 Java EE 和 EJB 組件框架中存在的一些主要缺陷。在這本書中曼验,他提出了一個基于普通 Java 類和依賴注入的更簡單的解決方案泌射。

在書中,他展示了如何在不使用 EJB 的情況下構(gòu)建高質(zhì)量鬓照,可擴展的在線座位預留系統(tǒng)熔酷。為了構(gòu)建應用程序,他編寫了超過 30,000 行的基礎(chǔ)結(jié)構(gòu)代碼豺裆,項目中的根包命名為 com.interface21拒秘,所以人們最初稱這套開源框架為 interface21,也就是 Spring 的前身臭猜。

他是誰呢躺酒,他就是大名鼎鼎的 Rod Johnson (下圖), Rod Johnson 在悉尼大學不僅獲得了計算機學位,同時還獲得了音樂學位蔑歌,更令人吃驚的是在回到軟件開發(fā)領(lǐng)域之前羹应,他還獲得了音樂學的博士學位。現(xiàn)在 Rod Johnson 已經(jīng)離開了 Spring 次屠,成為了一個天使投資人园匹,同時也是多個公司的董事雳刺,早已走上人生巔峰。

在這本書發(fā)布后偎肃,一對一的 J2EE 設(shè)計和開發(fā)一炮而紅煞烫。這本書免費提供的大部分基礎(chǔ)架構(gòu)代碼都是高度可重用的。 2003 年 Rod Johnson 和同伴在此框架的基礎(chǔ)上開發(fā)了一個全新的框架命名為 Spring ,據(jù) Rod Johnson 介紹 Spring 是傳統(tǒng) J2EE 新的開始累颂。隨后 Spring 發(fā)展進入快車道。

2004 年 03 月凛俱,1.0 版發(fā)布紊馏。

2006 年 10 月,2.0 版發(fā)布蒲犬。

2007 年 11 月更名為 SpringSource朱监,同時發(fā)布了 Spring 2.5。

2009 年 12 月原叮,Spring 3.0 發(fā)布赫编。

2013 年 12 月,Pivotal 宣布發(fā)布 Spring 框架 4.0奋隶。

2017 年 09 月擂送,Spring 5.0 發(fā)布。

Spring Boot 的誕生

隨著使用 Spring 進行開發(fā)的個人和企業(yè)越來越多唯欣,Spring 也慢慢從一個單一簡潔的小框架變成一個大而全的開源軟件嘹吨,Spring 的邊界不斷的進行擴充,到了后來 Spring 幾乎可以做任何事情了境氢,市面上主流的開源軟件蟀拷、中間件都有 Spring 對應組件支持,人們在享用 Spring 的這種便利之后萍聊,也遇到了一些問題问芬。

Spring 每集成一個開源軟件,就需要增加一些基礎(chǔ)配置寿桨,慢慢的隨著人們開發(fā)的項目越來越龐大此衅,往往需要集成很多開源軟件,因此后期使用 Spirng 開發(fā)大型項目需要引入很多配置文件牛隅,太多的配置非常難以理解炕柔,并容易配置出錯,到了后來人們甚至稱 Spring 為配置地獄媒佣。

Spring 似乎也意識到了這些問題匕累,急需有這么一套軟件可以解決這些問題,這個時候微服務的概念也慢慢興起默伍,快速開發(fā)微小獨立的應用變得更為急迫欢嘿,Spring 剛好處在這么一個交叉點上衰琐,于 2013 年初開始的 Spring Boot 項目的研發(fā),2014年4月炼蹦,Spring Boot 1.0.0 發(fā)布羡宙。

Spring Boot 誕生之初,就受到開源社區(qū)的持續(xù)關(guān)注掐隐,陸續(xù)有一些個人和企業(yè)嘗試著使用了 Spring Boot狗热,并迅速喜歡上了這款開源軟件。直到2016年虑省,在國內(nèi) Spring Boot 才被正真使用了起來匿刮,期間很多研究 Spring Boot 的開發(fā)者在網(wǎng)上寫了大量關(guān)于 Spring Boot 的文章,同時有一些公司在企業(yè)內(nèi)部進行了小規(guī)模的使用探颈,并將使用經(jīng)驗分享了出來熟丸。從2016年到2018年,使用 Spring Boot 的企業(yè)和個人開發(fā)者越來越多伪节,我們從 Spring Boot 關(guān)鍵字的百度指數(shù)就可以看出光羞。

上圖為2014年到2018年 Spring Boot 的百度指數(shù),可以看出 Spring Boot 2.0 的推出引發(fā)了搜索高峰怀大。

當然 Spring Boot 不是為了取代 Spring ,Spring Boot 基于 Spring 開發(fā)纱兑,是為了讓人們更容易的使用 Spring〔婕牛看到 Spring Boot 的市場反應萍启,Spring 官方也非常重視 Spring Boot 的后續(xù)發(fā)展,已經(jīng)將 Spring Boot 作為公司最頂級的項目來推廣屏鳍,放到了官網(wǎng)上第一的位置勘纯,因此后續(xù) Spring Boot 的持續(xù)發(fā)展也被看好。

什么是 Spring Boot

Spring Boot 介紹

Spring Boot 是由 Pivotal 團隊提供的全新框架钓瞭,其設(shè)計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程驳遵。該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置山涡。用我的話來理解堤结,就是 Spring Boot 其實不是什么新的框架,它默認配置了很多框架的使用方式鸭丛,就像 maven 整合了所有的 jar 包竞穷,Spring Boot 整合了所有的框架(不知道這樣比喻是否合適)。

Spring Boot 簡化了基于 Spring 的應用開發(fā)鳞溉,通過少量的代碼就能創(chuàng)建一個獨立的瘾带、產(chǎn)品級別的 Spring 應用。 Spring Boot 為 Spring 平臺及第三方庫提供開箱即用的設(shè)置熟菲,這樣你就可以有條不紊地開始看政。Spring Boot 的核心思想就是約定大于配置朴恳,多數(shù) Spring Boot 應用只需要很少的 Spring 配置。采用 Spring Boot 可以大大的簡化你的開發(fā)模式允蚣,所有你想集成的常用框架于颖,它都有對應的組件支持。

Spring Boot 特性

使用 Spring 項目引導頁面可以在幾秒構(gòu)建一個項目

方便對外輸出各種形式的服務嚷兔,如 REST API森渐、WebSocket、Web谴垫、Streaming章母、Tasks

非常簡潔的安全策略集成

支持關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫

支持運行期內(nèi)嵌容器,如 Tomcat翩剪、Jetty

強大的開發(fā)包,支持熱啟動

自動管理依賴

自帶應用監(jiān)控

支持各種 IED彩郊,如 IntelliJ IDEA 前弯、NetBeans

Spring Boot 這些特性會給我們研發(fā)帶來非常大的優(yōu)勢,下面我們可以分開來介紹:

使用 Spring Boot 的優(yōu)勢

使用 Spring Boot 開發(fā)項目秫逝,會給我們帶來非常美妙的開發(fā)體驗恕出,可以從以下幾個方面展開來說明

Spring Boot 讓開發(fā)變得更簡單

Spring Boot 對開發(fā)效率的提升是全方位的,我們可以簡單做一下對比:

在沒有使用 Spring Boot 之前我們開發(fā)一個 web 項目需要做哪些工作:

1)配置 web.xml违帆,加載 Spring 和 Spring mvc

2)配置數(shù)據(jù)庫連接浙巫、配置 Spring 事務

3)配置加載配置文件的讀取,開啟注解

4)配置日志文件

n) 配置完成之后部署 tomcat 調(diào)試

可能你還需要考慮各個版本的兼容性刷后,jar 包沖突的各種可行性的畴。

那么使用 Spring Boot 之后我們需要開發(fā)一個 web 項目需要哪些操作呢?

1)登錄網(wǎng)址?http://start.spring.io/?選擇對應的組件直接下載

2)導入項目尝胆,直接開發(fā)

上面的 N 步和下面的2步形成巨大的反差丧裁,這僅僅只是在開發(fā)環(huán)境搭建的這個方面。

Spring Boot 使測試變得更簡單

Spring Boot 對測試的支持不可謂不強大含衔,Spring Boot 內(nèi)置了7種強大的測試框架:

JUnit: 一個 Java 語言的單元測試框架

Spring Test & Spring Boot Test:為 Spring Boot 應用提供集成測試和工具支持

AssertJ:支持流式斷言的 Java 測試框架

Hamcrest:一個匹配器庫

Mockito:一個 java mock 框架

JSONassert:一個針對 JSON 的斷言庫

JsonPath:JSON XPath 庫

我們只需要在項目中引入spring-boot-start-test依賴包煎娇,就可以對數(shù)據(jù)庫、Mock贪染、 Web 等各種情況進行測試缓呛。

Spring Boot Test 中包含了我們需要使用的各種測試場景蜒滩,滿足我們?nèi)粘m椖康臏y試需求捎泻。

Spring Boot 讓配置變得更簡單

Spring Boot 讓配置變簡單,說到這里我們就需要了解一下 Spring Boot 的核心思想:約定優(yōu)于配置掺涛。那么什么是約定優(yōu)于配置呢寺渗?

約定優(yōu)于配置(convention over configuration)匿情,也稱作按約定編程兰迫,是一種軟件設(shè)計范式,旨在減少軟件開發(fā)人員需做決定的數(shù)量炬称,獲得簡單的好處汁果,而又不失靈活性。

本質(zhì)是說玲躯,開發(fā)人員僅需規(guī)定應用中不符約定的部分据德。例如,如果模型中有個名為 User 的類跷车,那么數(shù)據(jù)庫中對應的表就會默認命名為 user棘利。只有在偏離這一約定時,例如將該表命名為”user_info”朽缴,才需寫有關(guān)這個名字的配置善玫。

Spring Boot 讓部署變得更簡單

說起 Spring Boot 讓部署變簡單,就不得不說 Spring Boot 內(nèi)嵌容器密强。內(nèi)嵌容器不只讓部署變得簡單茅郎,其實在開發(fā)調(diào)試階段也會帶來非常大的便利性,對比以往開發(fā) Web 項目時配置 Tomcat 的繁瑣或渤,會讓大家使用 Spring Boot 內(nèi)嵌容器開發(fā)時有更深的感觸系冗。使用 Spring Boot 開發(fā) Web 項目,讓我們不需要關(guān)心容器的環(huán)境問題薪鹦,專心寫業(yè)務代碼即可掌敬。

Jenkins 是目前持續(xù)構(gòu)建領(lǐng)域使用最廣泛的工具之一,Jenkins 是一個獨立的開源自動化服務器池磁,可用于自動化各種任務奔害,如構(gòu)建,測試和部署軟件框仔。Jenkins 可以通過本機系統(tǒng)包 Docker 安裝舀武,甚至可以通過安裝 Java Runtime Environment 的任何機器獨立運行。

說直白一點 Jenkins 就是專門來負責如何將代碼變成可執(zhí)行的程序包离斩,將它部署到目標服務器中银舱,并對其運營狀態(tài)(日志)進行監(jiān)控的軟件。自動化跛梗、性能寻馏、打包、部署核偿、發(fā)布诚欠、發(fā)布結(jié)果自動化驗證、接口測試、單元測試等等關(guān)于我們打包測試部署的方方面面 Jenkins 都可以很友好的支持轰绵。

使用 Jenkins 部署 Spring Boot 項目非常簡單粉寞,大家想繼續(xù)了解可以參考我的文章:使用Jenkins部署Spring Boot,只需要前期做一些簡單的配置左腔,當我們需要發(fā)布項目時只需要點擊項目對應的發(fā)布按鈕唧垦,就可以將項目從版本庫中拉取、打包液样、發(fā)布到目標服務器中振亮,大大簡化了運維后期的部署工作。

虛擬化技術(shù)的發(fā)展給我們帶來了更多的可能性鞭莽,我們可以利用容器化技術(shù)坊秸,將 Spring Boot 項目做成鏡像,根據(jù)容器集群的策略來實現(xiàn)彈性擴容澎怒、動態(tài)部署等褒搔。所以 Spring Boot + Docker + Jenkins 會將 Spring Boot 項目的部署做得更簡單化、智能化喷面。

Spring Boot 讓監(jiān)控變得更簡單

可以說 Spring Boot 就是一款自帶監(jiān)控的開源軟件站超,在設(shè)計之初就考慮到應用的監(jiān)控問題,專門提供了一款監(jiān)控組件來完成這個工作乖酬,這個組件就是 Spring Boot Actuator 。

Spring Boot Actuator 是 Spring Boot 提供的對應用系統(tǒng)監(jiān)控的集成功能融求,可以查看應用配置的詳細信息咬像,例如自動化配置信息、創(chuàng)建的 Spring beans 以及一些環(huán)境屬性等生宛。

當然 Spring Boot Actuator 雖然可以監(jiān)控一個 Spring Boot 應用的健康情況县昂,實際上現(xiàn)在的系統(tǒng)都是需要很多的服務相互配合來完成工作,如何通過一個監(jiān)控軟件來監(jiān)控所以的 Spring Boot 項目將變得比較緊迫陷舅。

在開源界也有人意識到了這個問題倒彰,并且基于 Spring boot actuator 做出了一款強大的監(jiān)控軟件,這個軟件就是 Spring Boot admin 莱睁。

Spring Boot Admin 是一個管理和監(jiān)控 Spring Boot 應用程序的開源軟件待讳。每個應用都認為是一個客戶端,通過 HTTP 或者使用 Eureka 注冊到 admin server 中進行展示仰剿,Spring Boot Admin UI 部分使用 AngularJs 將數(shù)據(jù)展示在前端创淡。

Spring Boot Admin 是一個針對 spring-boot 的 actuator 接口進行UI美化封裝的監(jiān)控工具。他可以:在列表中瀏覽所有被監(jiān)控 spring-boot 項目的基本信息南吮,詳細的 Health 信息琳彩、內(nèi)存信息、JVM 信息、垃圾回收信息露乏、各種配置信息(比如數(shù)據(jù)源碧浊、緩存列表和命中率)等,還可以直接修改logger的level瘟仿。

使用 Spring Boot Admin 不僅可以監(jiān)控 Spring Boot 項目箱锐,還可以監(jiān)控 Spring Cloud 項目,因此使用了 Spring Boot 項目之后我們監(jiān)控 Spring Boot 集群效果如下:

簡單猾骡、直觀瑞躺、易用是它的特點,針對一些特殊情況還可以提供報警服務兴想。所以說使用 Spring Boot Actuator 解決了單個 Spring Boot 的監(jiān)控問題幢哨,使用 Spring Boot Admin 就是解決了整個集群監(jiān)控的問題。

Spring 嫂便、Spring Boot 和 Spring Cloud 的關(guān)系

Spring 最初最核心的兩大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring捞镰,Spring 在這兩大核心的功能上不斷的發(fā)展,才有了 Spring 事務毙替、Spirng Mvc 等一系列偉大的產(chǎn)品岸售,最終成就了 Spring 帝國,到了后期 Spring 幾乎可以解決企業(yè)開發(fā)中的所有問題厂画。

Spring Boot 是在強大的 Spring 帝國生態(tài)基礎(chǔ)上面發(fā)展而來凸丸,發(fā)明 Spring Boot 不是為了取代 Spring ,是為了讓人們更容易的使用 Spring 。所以說沒有 Spring 強大的功能和生態(tài)袱院,就不會有后期的 Spring Boot 火熱, Spring Boot 使用約定優(yōu)于配置的理念屎慢,重新重構(gòu)了 Spring 的使用,讓 Spring 后續(xù)的發(fā)展更有生命力忽洛。

Spring Cloud 是一系列框架的有序集合腻惠。它利用 Spring Boot 的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務發(fā)現(xiàn)注冊欲虚、配置中心集灌、消息總線、負載均衡复哆、斷路器欣喧、數(shù)據(jù)監(jiān)控等,都可以用 Spring Boot 的開發(fā)風格做到一鍵啟動和部署寂恬。

Spring 并沒有重復制造輪子续誉,它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實際考驗的服務框架組合起來初肉,通過 Spring Boot 風格進行再封裝屏蔽掉了復雜的配置和實現(xiàn)原理酷鸦,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護的分布式系統(tǒng)開發(fā)工具包。

根據(jù)上面的說明我們可以看出來臼隔,Spring Cloud 是為了解決微服務架構(gòu)中服務治理而提供的一系列功能的開發(fā)框架嘹裂,并且 Spring Cloud 是完全基于 Spring Boot 而開發(fā),Spring Cloud 利用 Spring Boot 特性整合了開源行業(yè)中優(yōu)秀的組件摔握,整體對外提供了一套在微服務架構(gòu)中服務治理的解決方案寄狼。

綜上我們可以這樣來理解,正是由于 Spring Ioc 和 Spring Aop 兩個強大的功能才有了 Spring 氨淌,Spring 生態(tài)不斷的發(fā)展才有了 Spring Boot 泊愧,使用 Spring Boot 讓 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 開發(fā)的一套微服務架構(gòu)下的服務治理方案盛正。

用一組不太合理的包含關(guān)系來表達它們之間的關(guān)系删咱。

Spring ioc/aop > Spring > Spring Boot > Spring Cloud

總結(jié)

不知道什么時候起,行業(yè)里一些開發(fā)人員愿意相信豪筝,使用復雜的軟件就意味著采用了高深的技術(shù)痰滋;使用了大量的配置,就意味著軟件有著很多比較強大的功能续崖。在產(chǎn)品設(shè)計的時候有一個理念就是讓產(chǎn)品操作足夠的傻瓜化敲街,假設(shè)用戶是一個智商并不高的群體,卻可以使他很容易的學會使用其產(chǎn)品严望,將此特性做為產(chǎn)品設(shè)計的一項標準之一多艇。

其實我們的開源軟件也是一款產(chǎn)品,繁瑣并不意味著功能強大像吻,反而有可能是設(shè)計不夠合理墩蔓;簡潔也并不意味著簡單,很有可能它只是將眾多復雜的功能進行了封裝萧豆,讓我們在使用的時候足夠的簡單。好的產(chǎn)品如此昏名,好的開源軟件也應該如此涮雷,Spring Boot 的出現(xiàn)就是讓編程變得更簡單一些。

在此引用 Python 的經(jīng)典設(shè)計格言轻局,格言來源于 Python 但不限于 Python洪鸭。

美麗優(yōu)于丑陋。?

清楚優(yōu)于含糊仑扑。?

簡單優(yōu)于復雜览爵。?

復雜優(yōu)于繁瑣。?

平坦優(yōu)于曲折镇饮。?

寬松優(yōu)于密集蜓竹。?

重要的是可讀性。?

特殊的案例不足以特殊到破壞規(guī)則。?

盡管實踐可以打破真理俱济。?

錯誤卻不可置之不理嘶是。?

除非另有明確要求。?

面對模棱兩可蛛碌,拒絕猜測聂喇。?

總會有一個 —— 最好是只有一個 —— 顯而易見的方式來明辨。?

哪怕這種方式在開始的時候可能并不明顯蔚携。?

現(xiàn)在有比沒有好希太。?

盡管沒有經(jīng)常好于現(xiàn)在。?

如果如何實現(xiàn)很難被解釋清楚酝蜒,那么這個想法就是一個壞想法誊辉。?

如果如何實現(xiàn)可以被很好的解釋,那么這是一個好想法秕硝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芥映,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子远豺,更是在濱河造成了極大的恐慌奈偏,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躯护,死亡現(xiàn)場離奇詭異惊来,居然都是意外死亡,警方通過查閱死者的電腦和手機棺滞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門裁蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人继准,你說我怎么就攤上這事枉证。” “怎么了移必?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵室谚,是天一觀的道長。 經(jīng)常有香客問我崔泵,道長秒赤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任憎瘸,我火速辦了婚禮入篮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幌甘。我一直安慰自己潮售,他們只是感情好痊项,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饲做,像睡著了一般线婚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盆均,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天塞弊,我揣著相機與錄音,去河邊找鬼泪姨。 笑死游沿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肮砾。 我是一名探鬼主播诀黍,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仗处!你這毒婦竟也來了眯勾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤婆誓,失蹤者是張志新(化名)和其女友劉穎吃环,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洋幻,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡郁轻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了文留。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片好唯。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖燥翅,靈堂內(nèi)的尸體忽然破棺而出骑篙,到底是詐尸還是另有隱情,我是刑警寧澤森书,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布替蛉,位于F島的核電站,受9級特大地震影響拄氯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜它浅,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一译柏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姐霍,春花似錦鄙麦、人聲如沸典唇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介衔。三九已至,卻和暖如春骂因,著一層夾襖步出監(jiān)牢的瞬間炎咖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工寒波, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乘盼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓俄烁,卻偏偏與公主長得像绸栅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子页屠,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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