最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

詳細SpringBoot框架教程——SpringBoot開發(fā)實踐

2021-03-30 11:32 作者:動力節(jié)點小王本王  | 我要投稿



本篇文章主要內(nèi)容

SpringBoot開發(fā)最佳實踐

SpringBoot敏感配置信息加密

SpringBoot數(shù)據(jù)庫連接池

SpringBoot跨域資源共享CORS

SpringBoot靜態(tài)資源處理

SpringBoot核心配置文件

(Duration/DataSize單位類型、隨機值、占位符、多環(huán)境、4種配置文件讀取方式)

SpringBoot線程池異步調(diào)用(@Async、手動編碼)


SpringBoot開發(fā)最佳實踐

1、SpringBoot 程序,每個類應該有一個包,沒有包的話會出現(xiàn)問題;

2、一個合理的包結(jié)構(gòu):

3、我們通常建議您將主應用程序類放在其他類之上的根包中,主類上需要有一個@SpringBootApplication注解,默認是掃描當前包及子類下的標有@Component,?@Service,?@Repository,?@Controller等注解的bean;

4、如果main類上不使用@SpringBootApplication注解,可以使用@EnableAutoConfiguration、@ComponentScan、@Configuration 注解代替;

5、main方法的類也是一個配置類,也是ioc容器中的一個bean,Springboot不推薦使用xml配置方式;

6、還可以通過@Import導入其他bean對象(組件),或者通過@Configuration加入bean組件,或者@Configuration+@Bean,或者@Configuration+@ComponentScan加入bean對象(組件);

7、也可以通過@ImportResource(locations = "classpath:applicationContext.xml")加入xml配置的bean對象(組件);

8、禁止某些自動配置:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

或者在配置文件中 spring.autoconfigure.exclude=?進行排除,可以達到優(yōu)化程序的效果;

9、springboot內(nèi)嵌了web服務器,所以打成一個jar包即可運行,方便我們的開發(fā)和調(diào)試;

10、延遲初始化bean:spring.main.lazy-initialization=true

如果要禁用某些bean的延遲初始化,則可以使用@Lazy(value=false)注解將它們的延遲屬性顯式設(shè)置為false

SpringApplication啟用延遲初始化后,將根據(jù)需要創(chuàng)建bean,而不是在應用程序啟動期間創(chuàng)建bean,因此啟用延遲初始化可以減少啟動應用程序所需的時間。在Web應用程序中,啟用延遲初始化將導致許多與Web相關(guān)的Bean直到收到HTTP請求后才被初始化。延遲初始化的缺點是,它可能會延遲發(fā)現(xiàn)應用程序問題。如果錯誤配置Bean延遲初始化,則可能導致啟動時沒有問題,在訪問調(diào)用的時候出現(xiàn)問題,另外還必須注意確保JVM有足夠的內(nèi)存來容納所有應用程序的bean,而不僅僅是啟動過程中初始化的bean,由于這些原因,默認情況下SpringBoot不會開啟延遲初始化;

11、CommandLineRunner, ApplicationRunner在springboot啟動后回調(diào)著兩個接口里面的run方法;

SpringBoot敏感配置信息加密

配置信息加密主要利用了http://www.jasypt.org/?這個類庫,Jasypt是一個Java庫,允許開發(fā)人員以最小的努力將基本的加解密功能添加到你的項目中,而無需對密碼加解密的工作原理有深入的了解;

Github:https://github.com/jasypt/jasypt?這個庫是java語言寫的;

不過直接使用上面這個類庫進行開發(fā)稍微有些麻煩,所以在SpringBoot中有人對Jasypt制作了一個starter依賴,方便開發(fā),maven依賴如下:

加解密代碼

SpringBoot中的數(shù)據(jù)源

SpringBoot默認采用的是HikariCP數(shù)據(jù)庫連接池,該數(shù)據(jù)庫連接池性能極好;

若要更換為阿里巴巴Druid數(shù)據(jù)庫連接池,首先把HikariCP的依賴排除掉:

然后添加druid依賴

然后需要在配置文件中指定:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

另外一種更簡潔的方式是通過starter更換為Druid數(shù)據(jù)庫連接池,直接加一個依賴即可:

除此之外還有其他一些數(shù)據(jù)庫連接池:

DBCP

DBCP2

Tomcat JDBC

C3P0

等等

SpringBoot跨域資源共享CORS支持

Spring 4.2.x版本開始支持CORS

我們知道,傳統(tǒng)的Ajax請求只能獲取在同一個域名下的資源,但是HTML5規(guī)范中打破了這限制,允許Ajax發(fā)起跨域的請求

瀏覽器本身是可以發(fā)起跨域請求的,比如你可以鏈接一個外域的圖片或者腳本,但是javascript腳本是不能獲取這些外域資源內(nèi)容的;

CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing),它允許瀏覽器向跨源服務器發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制;

這種CORS使用了一個額外的HTTP響應頭來賦予當前user-agent(瀏覽器)獲得非同源資源的權(quán)限,這里的非同源就是Cross-Origin的概念,這里的權(quán)限就是訪問非同源的資源權(quán)限

CORS現(xiàn)在HTML5標準的一部分,在大部分現(xiàn)代瀏覽器中有所支持,可能在某些老版本的瀏覽器不支持CORS,如果要兼容一些老的瀏覽器版本,則需要采用JSONP進行跨域請求;

同源與非同源的定義

如果訪問協(xié)議、端口(如果指定了端口)、host都相同,則稱之為同源,否則為非同源;

比如源鏈接:?http://store.company.com/dir/page.html

SpringBoot解決跨域問題,只需要配置如下代碼即可:

JSONP 是 JSON with padding(填充式 JSON 或參數(shù)式 JSON)的簡寫;

JSONP實現(xiàn)跨域請求的原理簡單說,就是動態(tài)創(chuàng)建<script>標簽,然后利用<script>的src 不受同源策略約束來跨域獲取數(shù)據(jù);

JSONP 由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù),回調(diào)函數(shù)是當響應到來時應該在頁面中調(diào)用的函數(shù)回調(diào)函數(shù)的名字一般是在請求中指定的,而數(shù)據(jù)就是傳入回調(diào)函數(shù)中的 JSON 數(shù)據(jù),例如;

CORS與JSONP比較

  • CORS與JSONP都是為了跨域,但是CORS比JSONP更強大;

  • JSONP只支持GET請求,CORS支持所有類型的HTTP請求;

  • JSONP的優(yōu)勢在于支持老式瀏覽器;

SpringBoot靜態(tài)資源處理

靜態(tài)資源:js, css, html, 圖片,音視頻等;

靜態(tài)資源路徑:是指系統(tǒng)可以直接訪問的路徑,且路徑下的所有文件均可被用戶直接訪問;

Spring Boot默認靜態(tài)資源目錄位置位于classpath下,目錄名需符合如下規(guī)則:

有4個目錄下的靜態(tài)資源可以直接訪問:

/static

/public

/resources

/META-INF/resources

?在SpringBoot的源碼中有定義:

可以通過spring.resources.static-locations=classpath:/mysource/進行修改;

SpringBoot核心配置文件

1、.properties文件

鍵值對的properties屬性文件配置方式

SpringBoot默認讀取該文件作為項目配置文件

2、.yml文件

yml 也是一種配置文件格式,主要采用空格、換行、冒號等格式排版進行配置;

yml 后綴也可以使用 yaml 后綴;

配置的值與前面的冒號必須要有一個空格;

只要在類路徑上具有SnakeYAML的jar包,SpringApplication類就會自動支持YAML作為配置文件,默認的spring-boot-starter自動依賴了SnakeYAML

具體使用可以參考一下視頻演示;

3、多環(huán)境配置文件

#比如配置測試環(huán)境

spring.profiles.active=dev

application-dev.properties

#比如配置生產(chǎn)環(huán)境

spring.profiles.active=product

application-product.properties

配置隨機值,通過配置文件得到一個隨機值,springboot提供RandomValuePropertySource可用于注入隨機值(例如,注入一些隨機值或測試用例),它可以產(chǎn)生整數(shù),longs,uuid或字符串,如下示例所示:

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

4、配置文件中可以使用占位符:

my.name = cat
my.desc = ${my.name} is a teacher.

5、Duration單位轉(zhuǎn)換:

30秒超時:

30,PT30S、30s都是等效的;

500ms超時:

500,PT0.5S和500ms都是等效的;

也可以使用任何受支持的單位,包括:

ns納秒

us 微秒

ms 毫秒(毫秒)

s秒

m分鐘

H 小時

d天

w周

m月

y年

比如:

server.servlet.session.timeout=1800s

server.servlet.session.timeout=30m

server.servlet.session.timeout=PT30m

6、DataSize?類型單位轉(zhuǎn)換

若要指定10 MB的緩沖區(qū)大小,則10和10MB是等效的;

256個字節(jié)的大小閾值可以指定為256或256B;

B?for bytes

KB?for kilobytes

MB?for megabytes

GB?for gigabytes

TB?for terabytes

比如:

server.tomcat.max-swallow-size=2048KB

application.properties/yml文件讀取

1、通過@Value注解讀??;(配置項比較少的時候)

2、通過映射類讀?。唬ㄅ渲庙椖勘容^多的時候)

新建一個配置映射類,只需要說明配置的前綴

@ConfigurationProperties(prefix = "myconfig.user")//前綴

public class User {

private String name;//自動匹配name

private int sex;//自動匹配sex

private int age;//自動匹配age

}

3、通過Environment對象讀?。唬╯pring ioc直接就給我們創(chuàng)建了該環(huán)境對象)

從環(huán)境對象中讀取配置;

@Autowired

Environment env;

?

@GetMapping("/user")

Public String user() {

????????StringBuilder sb = new StringBuilder();

????????sb.append("從Environment中獲取配置:\n");

????????sb.append(env.getProperty("myconfig.user.name"));//注意這里不加${}

????????return sb.toString();

}

4、通過嵌套靜態(tài)內(nèi)部類讀取(參考server.前綴的方式)

SpringBoot線程池異步調(diào)用

SpringBoot框架自動裝配提供了一個的線程池,用于提交異步任務;

有了線程池我們就只需要寫任務即可,提交任務采用@Async注解;(底層是aop)

Springboot自動裝配提供的線程池還可以根據(jù)需要進行配置:

#SpringBoot配置線程池,修改線程池默認配置

spring.task.execution.pool.max-size=99999
spring.task.execution.thread-name-prefix=cat-task-
spring.task.execution.pool.queue-capacity=99999

我們也可以覆蓋SpringBoot自動配置的線程池,用我們自定義的線程池:


如果想更深入的學習springboot,奉上springboot全套視頻教程,視頻學習效果更佳,走過路過別忘素質(zhì)三連哦~~

詳細SpringBoot框架教程——SpringBoot開發(fā)實踐的評論 (共 條)

分享到微博請遵守國家法律
益阳市| 丰城市| 延津县| 吉林省| 磐石市| 凌海市| 达州市| 东乡| 德钦县| 松桃| 达州市| 赞皇县| 赤水市| 白玉县| 广安市| 隆安县| 龙井市| 中超| 吉隆县| 通海县| 夹江县| 阳新县| 太保市| 醴陵市| 台南县| 彩票| 舒城县| 纳雍县| 广安市| 石渠县| 萍乡市| 榕江县| 蓝田县| 洛阳市| 资阳市| 绥化市| 滨州市| 平远县| 道孚县| 霍州市| 东丰县|