本篇內(nèi)容主要講解“springboot熱部署的兩種方式是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“springboot熱部署的兩種方式是什么”吧!
成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站制作公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!
springboot和springmvc的區(qū)別
spring boot 內(nèi)嵌tomcat,Jetty和Undertow容器,可以直接運(yùn)行起來(lái),不在再做部署;
spring boot 自動(dòng)配置,減少了xml文件的大量配置;降低了項(xiàng)目搭建的復(fù)雜度
Spring MVC是基于 Servlet 的一個(gè) MVC 框架 主要解決 WEB 開(kāi)發(fā)的問(wèn)題,因?yàn)?Spring 的配置非常復(fù)雜,各種XML、 JavaConfig、hin處理起來(lái)比較繁瑣。于是為了簡(jiǎn)化開(kāi)發(fā)者的使用,從而創(chuàng)造性地推出了Spring boot,約定優(yōu)于配置,簡(jiǎn)化了spring的配置流程。
Spring 是一個(gè)“引擎”;
Spring MVC 是基于Spring的一個(gè) MVC 框架 ;
Spring Boot 是基于Spring4的條件注冊(cè)的一套快速開(kāi)發(fā)整合包。
springboot熱部署的兩種方式
SpringBoot 1.3后才擁有SpringBoot devtools熱部署
①:spring-boot-devtools ②:Spring Loaded
方式一:
在項(xiàng)目的pom文件中添加依賴:
org.springframework.boot spring-boot-devtools
然后:使用 shift+ctrl+alt+"/" (IDEA中的快捷鍵) 選擇"Registry" 然后勾選 compiler.automake.allow.when.app.running
方式二:
在項(xiàng)目中添加如下代碼
org.springframework.boot spring-boot-maven-plugin org.springframework springloaded 1.2.6.RELEASE
添加完畢后需要使用mvn指令運(yùn)行:
首先找到IDEA中的Edit configurations ,然后進(jìn)行如下操作:(點(diǎn)擊左上角的"+",然后選擇maven將出現(xiàn)右側(cè)面板,在紅色劃線部位輸入如圖所示指令,你可以為該指令命名(此處命名為MvnSpringBootRun))
點(diǎn)擊保存將會(huì)在IDEA項(xiàng)目運(yùn)行部位出現(xiàn),點(diǎn)擊綠色箭頭運(yùn)行即可
springboot配置文件
spring boot使用一個(gè)全局配置文件:主要是以下兩種類型
application.properties :例:server.port=9998
application.yml(YAML) :例:server:
port:8080
配置文件的作用主要是修改spring boot在底層的默認(rèn)配置
Spring Boot 的核心注解
啟動(dòng)類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要組合包含了以下 3 個(gè)注解:
@SpringBootConfiguration:組合了 @Configuration 注解,實(shí)現(xiàn)配置文件的功能。
@EnableAutoConfiguration:打開(kāi)自動(dòng)配置的功能,也可以關(guān)閉某個(gè)自動(dòng)配置的選項(xiàng),如關(guān)閉數(shù)據(jù)源自動(dòng)配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描。
spring boot的starter的執(zhí)行原理
利用starter實(shí)現(xiàn)自動(dòng)化配置只需要兩個(gè)條件——maven依賴、配置文件,這里簡(jiǎn)單介紹下starter實(shí)現(xiàn)自動(dòng)化配置的流程。
引入maven實(shí)質(zhì)上就是導(dǎo)入jar包,spring-boot啟動(dòng)的時(shí)候會(huì)找到starter jar包中的resources/META-INF/spring.factories文件,根據(jù)spring.factories文件中的配置,找到需要自動(dòng)配置的類
Spring Boot與Spring MVC的區(qū)別
Spring Boot是Spring和Spring MVC的整合,而Spring MVC只是Spring的一個(gè)模塊,一個(gè)輕量級(jí)的Web層框架
Spring Boot幾乎可以實(shí)現(xiàn)零配置,所有功能使用注解進(jìn)行開(kāi)發(fā),運(yùn)用了'約定大于配置'的思想,簡(jiǎn)化了項(xiàng)目開(kāi)發(fā)
難度,而Spring MVC需要依賴于xml配置進(jìn)行開(kāi)發(fā)
Spring Boot提供了內(nèi)置的tomcat,可以打成jar包直接運(yùn)行,也可以使用外置tomcat
Spring Boot還繼承了許多第三方庫(kù)配置,例如,JDBC, Mongo, redis等,應(yīng)用這些第三方庫(kù),幾乎可以零配置
springcloud的服務(wù)注冊(cè)和發(fā)現(xiàn)是怎樣的原理
Eureka包含兩個(gè)組件:Eureka Server和Eureka Client
Eureka Server提供服務(wù)注冊(cè)服務(wù)
各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在EurekaServer中進(jìn)行注冊(cè),這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到
EurekaClient是一個(gè)Java客戶端,用于簡(jiǎn)化Eureka Server的交互,客戶端同時(shí)也具備一個(gè)內(nèi)置的、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器。在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)。如果Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳,EurekaServer將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)
Eureka三大角色:
Eureka Server 提供服務(wù)注冊(cè)和發(fā)現(xiàn)
Service Provider服務(wù)提供方將自身服務(wù)注冊(cè)到Eureka,從而使服務(wù)消費(fèi)方能夠找到
Service Consumer服務(wù)消費(fèi)方從Eureka獲取注冊(cè)服務(wù)列表,從而能夠消費(fèi)服務(wù)
作為服務(wù)注冊(cè)中心,Eureka 和 Zookeeper對(duì)比的優(yōu)勢(shì):
著名的CAP理論指出,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足C(一致性)、A(可用性)和P(分區(qū)容錯(cuò)性)。由于分區(qū)容錯(cuò)性P在是分布式系統(tǒng)中必須要保證的,因此我們只能在A和C之間進(jìn)行權(quán)衡。
因此
Zookeeper保證的是CP,
Eureka則是AP
mybatis中的#和$的區(qū)別
#相當(dāng)于對(duì)數(shù)據(jù) 加上 雙引號(hào),$相當(dāng)于直接顯示數(shù)據(jù)
#將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。如:order by #user_id#,如果傳入的值是111,那么解析成sql時(shí)的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
$將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時(shí)的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.
3#方式能夠很大程度防止sql注入。
$方式無(wú)法防止Sql注入。
$方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名.
一般能用#的就別用$.
MyBatis排序時(shí)使用order by 動(dòng)態(tài)參數(shù)時(shí)需要注意,用$而不是#
字符串替換
默認(rèn)情況下,使用#{}格式的語(yǔ)法會(huì)導(dǎo)致MyBatis創(chuàng)建預(yù)處理語(yǔ)句屬性并以它為背景設(shè)置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時(shí)你只是想直接在SQL語(yǔ)句中插入一個(gè)不改變的字符串。比如,像ORDER BY,你可以這樣來(lái)使用:
ORDER BY ${columnName}
這里MyBatis不會(huì)修改或轉(zhuǎn)義字符串。
Redis怎樣淘汰數(shù)據(jù)
volatile-lru :從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰
volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過(guò)期的數(shù)據(jù)淘汰
volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中隨機(jī)挑選數(shù)據(jù)淘汰
allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰
allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中隨機(jī)挑選數(shù)據(jù)淘汰
no-envivtion(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)
LRU機(jī)制:
redis保存了lru計(jì)數(shù)器server.lrulock,會(huì)定時(shí)的去更新(redis定時(shí)程序severCorn()),每個(gè)redis對(duì)象都會(huì)設(shè)置相應(yīng)的lru值,每次訪問(wèn)對(duì)象的時(shí)候,redis都會(huì)更新redisObject.lru。
LRU淘汰機(jī)制:在數(shù)據(jù)集中隨機(jī)挑選幾個(gè)鍵值對(duì),取出其中l(wèi)ru最大的鍵值對(duì)淘汰。所以,redis并不能保證淘汰的數(shù)據(jù)都是最近最少使用的,而是隨機(jī)挑選的鍵值對(duì)中的。
TTL機(jī)制:
redis數(shù)據(jù)集結(jié)構(gòu)中保存了鍵值對(duì)過(guò)期時(shí)間表,即 redisDb.expires。
TTL淘汰機(jī)制:在數(shù)據(jù)集中隨機(jī)挑選幾個(gè)鍵值對(duì),取出其中最接近過(guò)期時(shí)間的鍵值對(duì)淘汰。所以,redis并不能保證淘汰的數(shù)據(jù)都是最接近過(guò)期時(shí)間的,而是隨機(jī)挑選的鍵值對(duì)中的。
redis在每服務(wù)客戶端執(zhí)行一個(gè)命令的時(shí)候,會(huì)檢測(cè)使用的內(nèi)存是否超額
到此,相信大家對(duì)“springboot熱部署的兩種方式是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!