成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從Tomcat到Spring Boot

hikui / 864人閱讀

摘要:暮夏八月是一年中最好的時(shí)節(jié),近近地看到了涼爽的希望,卻還能享用暖熱的余溫。距離發(fā)布已經(jīng)年有余,我們嘗試在這個(gè)夏天把這只已經(jīng)獨(dú)自在外游蕩了年的野貓裝入春天的長靴??偨Y(jié)以上就是從遷移到所需要的所有改動(dòng)。

暮夏八月是一年中最好的時(shí)節(jié),近近地看到了涼爽的希望,卻還能享用暖熱的余溫。距離Phil Webb發(fā)布Spring Boot已經(jīng)4年有余,我們嘗試在這個(gè)夏天把這只已經(jīng)獨(dú)自在外游蕩了19年的野貓Tomcat裝入春天的長靴。

從零開始安裝Spring Boot項(xiàng)目,使用內(nèi)嵌的Tomcat引擎是比較容易的事情,各種中文教程已經(jīng)數(shù)不勝數(shù),那不是我們要談?wù)摰脑掝}。在這里我們要做的是以最小的代價(jià)把一個(gè)已有的Tomcat項(xiàng)目改造為Spring Boot項(xiàng)目,以實(shí)現(xiàn)我們微服務(wù)改造的第一步。

對(duì)pom.xml的修改 添加spring-boot-maven-plugin

一般來說,在每一個(gè)pom.xml的結(jié)尾,都會(huì)有一個(gè)build段落,在這里添加spring-boot-maven-plugin是必經(jīng)的第一個(gè)步驟,添加完之后的完整段落如下:

    
        my-app
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.5.1
                
                    1.8
                    1.8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    -Xmx64m
                
            
        
    

在這里,我們特別添加了一個(gè)configuration段落,設(shè)置-Xmx64m,這是因?yàn)?b>Tomcat缺省會(huì)分配物理內(nèi)存的1/4為堆內(nèi)存,這樣我們一臺(tái)電腦最多只能運(yùn)行4個(gè)Tomcat服務(wù),內(nèi)存就不夠用了。在這里我們把heap size的最大尺寸設(shè)置為只用64m,可以有效節(jié)省內(nèi)存,最多會(huì)引起垃圾回收頻繁一些而已,這之間的平衡可以自己掌握。

添加spring-boot-starter-parent

Spring Boot是一個(gè)非常獨(dú)立的父母,它認(rèn)為所有與spring有關(guān)的依賴都是它的孩子,所以我們必須引入spring-boot-starter-parent,讓它來管理所有姓spring的孩子。

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.4.RELEASE
        
    

由于Spring Boot自己管理所有spring依賴,你還需要把原先加在pom.xml里的所有與spring有關(guān)的依賴(以及所有spring想要管理的依賴,例如com.fasterxml.jackson.core)全部刪掉,否則會(huì)造成版本沖突。比如這樣:


org.springframework
spring-core
4.1.1.RELEASE

添加spring-boot-starter-web

Spring Boot唯一需要我們手工添加的依賴只有一個(gè):

        
            org.springframework.boot
            spring-boot-starter-web
        

有了這個(gè)依賴以后,Spring Boot項(xiàng)目啟動(dòng)的時(shí)候就會(huì)內(nèi)嵌一個(gè)Tomcat服務(wù)器。同時(shí)Spring Boot帶來的另外一個(gè)好處是:我們從此不必再依賴Tomcat,如果我們想換成其它引擎,只需要加上新引擎,排除掉Tomcat就可以了,假設(shè)我們想換成Undertow,只需要這樣設(shè)置:

        
            org.springframework.boot
            spring-boot-starter-undertow
        

        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-tomcat
                
            
        
主程序入口 Application.java

傳統(tǒng)的Tomcat應(yīng)用是讓Tomcat先啟動(dòng),然后加載我們的war文件,改造之后是Spring Boot先啟動(dòng),由Spring Boot來加載Tomcat,所以我們需要給我們的應(yīng)用里增加一個(gè)Application.java文件:

package com.domain.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
application.properties

傳統(tǒng)的Tomcat是把所有配置項(xiàng)放在webapp/WEB-INF/web.xml里來管理的,Spring Boot不使用web.xml文件,它把所有配置項(xiàng)都放在resources/application.properties文件中,例如:

server.port=8090
server.servlet.context-path=/app
運(yùn)行

至此為止,就已經(jīng)完成了從TomcatSpring Boot的遷移。我們可以通過maven運(yùn)行Spring Boot來看一下效果:

mvn spring-boot:run
添加dubbo

如果以前的項(xiàng)目是由dubbo完成的,暫時(shí)還不想破壞原有架構(gòu),可以把dubbo集成到Spring Boot中來。

pom.xml

pom.xml中添加dubbo-spring-boot-starter依賴:

        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            1.0.2
        

這個(gè)dubbo-spring-boot-starter的最高版本是2.0.0,并且即便這個(gè)2.0.0也已經(jīng)被廢棄,更高的版本遷移到了incubator-dubbo-spring-boot-project上,但是由于我用的是dubbo較低的版本2.5.3,使用了比較方便的方式,所以不可能采用它的2.0.0版本,更加不可能使用incubator-dubbo-spring-boot-project(這個(gè)incubator-dubbo-spring-boot-project項(xiàng)目甚至不支持在application.properties文件中對(duì)dubbo做配置)。

Dubbo2.5.7以后廢棄了方式,改采@DubboComponentScan方式,我個(gè)人認(rèn)為這種新方式遠(yuǎn)遠(yuǎn)不如舊的方式簡便,所以目前或者以后也不準(zhǔn)備遷移到更高版本的dubbo了。

Application.java

pom.xml中添加對(duì)dubbo的依賴后,還需要在Application.java中添加dubbo的自動(dòng)配置功能:

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

@SpringBootApplication
@EnableDubboConfiguration
application.properties

然后在application.properties文件中添加dubbo的配置項(xiàng):

spring.dubbo.appname=my-app
spring.dubbo.registry=zookeeper://myip.mydomain.com:2181

這個(gè)配置項(xiàng)功能很弱,但勉強(qiáng)夠用。雖然它會(huì)造成一些很難看的日志:

[2018-08-26 12:21:25] WARN  -  [DUBBO] ReferenceConfig(null) is not DESTROYED when FINALIZE, dubbo version: 2.5.3, current host: 192.168.1.2

但是鑒于這個(gè)插件已經(jīng)被廢棄了,不會(huì)有人來解決這個(gè)問題,只能勉強(qiáng)這么用了。

總結(jié)

以上就是從Tomcat遷移到Spring Boot所需要的所有改動(dòng)。總計(jì)只是修改了pom.xml一個(gè)文件,新增了Application.javaapplication.properties兩個(gè)文件,新增代碼行數(shù)不超過20行,整個(gè)遷移過程還是比較簡便的。

當(dāng)然,僅僅在代碼層面遷移到Spring Boot不是最終目的,我們還需要在pom.xml文件中把war改為jar,這樣我們?cè)趫?zhí)行mvn package之后,就可以java -jar myapp.jar來在服務(wù)器端進(jìn)行部署。

更進(jìn)一步,當(dāng)以Spring Boot方式啟動(dòng)的微服務(wù)越來越多的時(shí)候,服務(wù)治理將成為一個(gè)難題,這時(shí)候就需要考慮引入Eureka或者甚至Kubernetes進(jìn)行服務(wù)治理,那將是另外一個(gè)大話題了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76871.html

相關(guān)文章

  • 如何優(yōu)雅關(guān)閉 Spring Boot 應(yīng)用

    摘要:除了,還有十余種,有的是特定操作,比如轉(zhuǎn)儲(chǔ)內(nèi)存日志有的是信息展示,比如顯示應(yīng)用健康狀態(tài)。 showImg(http://ww1.sinaimg.cn/large/006tNc79gy1g5qb2coyfoj30u00k0tan.jpg); 前言 隨著線上應(yīng)用逐步采用 SpringBoot 構(gòu)建,SpringBoot應(yīng)用實(shí)例越來多,當(dāng)線上某個(gè)應(yīng)用需要升級(jí)部署時(shí),常常簡單粗暴地使用 kil...

    xiyang 評(píng)論0 收藏0
  • Spring Boot Hello World

    摘要:現(xiàn)在這還是一個(gè)空的項(xiàng)目,我們可以在標(biāo)簽中添加我們需要的依賴,例如添加的依賴。修改我們的配置如下目前我們的這個(gè)項(xiàng)目還沒有導(dǎo)入任何,這點(diǎn)可以通過執(zhí)行命令確定。 本篇文章是SpringBoot最入門的介紹。我們不借助任何額外的工具,從無到有創(chuàng)建一個(gè)Spring Boot的web項(xiàng)目,并運(yùn)行這個(gè)項(xiàng)目。 項(xiàng)目構(gòu)建 歸根結(jié)底,Spring Boot就只是一個(gè)框架,幾個(gè)jar而已,沒什么神奇的。但使...

    lijinke666 評(píng)論0 收藏0
  • spring-boot創(chuàng)建最簡單的web應(yīng)用

    摘要:初衷看了一下相關(guān)的書籍,創(chuàng)建一個(gè)的應(yīng)用,是那么的簡單。首先,我們只是創(chuàng)建一個(gè)簡單的并不打算使用默認(rèn)的,而是使用傳統(tǒng)的。在下創(chuàng)建目錄并且在目錄下新建,內(nèi)容為頁面。如果是在內(nèi)置的的情況下,應(yīng)用會(huì)自動(dòng)重啟。 初衷 看了一下spring-boot相關(guān)的書籍,創(chuàng)建一個(gè)hello world!的應(yīng)用,是那么的簡單。然而,自己動(dòng)手,卻很不一樣。 首先,我們只是創(chuàng)建一個(gè)簡單的hello world!并...

    xiaolinbang 評(píng)論0 收藏0
  • Spring Boot整合jsp后必須通過spring-boot:run方式啟動(dòng)?

    摘要:為什么整合后必須通過方式啟動(dòng)背景在整合這篇文章中,我們用了兩種啟動(dòng)方式方法啟動(dòng)測(cè)試發(fā)現(xiàn),通過啟動(dòng)能夠正常渲染頁面,而通過方法啟動(dòng)無法渲染,本文分析下原因。通過來啟動(dòng)對(duì)應(yīng)的服務(wù)器。 為什么整合jsp后必須通過spring-boot:run方式啟動(dòng)? 背景 在Spring Boot - 整合Jsp/FreeMarker這篇文章中,我們用了兩種啟動(dòng)方式 mvn clean spring-b...

    roundstones 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<