最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Springboot 重要知識點整理匯總

 更新時間:2021年11月24日 10:00:15   作者:香菜聊游戲  
Spring Boot作為微服務中最好的Java框架,本文主要為大家整理匯總了七個Spring Boot的重要知識點,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、springboot controller 單例

Spring中 controller默認是單例的,因為單例所以不是線程安全的。

所以需要注意下面幾點

  1. 不要在Controller中定義成員變量,可能會造成數(shù)據(jù)混亂。
  2. 萬一必須要定義一個非靜態(tài)成員變量時候,則通過注解@Scope(“prototype”),將其設置為多例模式。
  3. 在Controller中使用ThreadLocal變量解決多線程問題

spring bean作用域:

singleton:單例模式,當spring創(chuàng)建applicationContext容器的時候,spring會欲初始化所有的該作用域實例,加上lazy-init就可以避免預處理;

prototype:原型模式,每次通過getBean獲取該bean就會新產(chǎn)生一個實例,創(chuàng)建后spring將不再對其管理;

2、Springboot 環(huán)境變量配置

在開發(fā)的過程中不是所有的配置文件都可以寫入yaml或者properties文件中,可能需要動態(tài)的從容器中讀取,看下如何配置

現(xiàn)在看看如果我們使用環(huán)境變量的方式來配置我們的參數(shù),如下:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DEMO_APP_JDBC_URL:jdbc:mysql://127.0.0.1/demo?serverTimezone=Asia/Shanghai}
    username: ${DEMO_APP_JDBC_USERNAME:demo}
    password: ${DEMO_APP_JDBC_PASSWORD:demo}
    hikari:
      maximum-pool-size: ${DEMO_APP_JDBC_POOL_MAX_SIZE:30}
      max-lifetime: ${DEMO_APP_JDBC_POOL_MAX_LIFE_TIME:60000}
      minimum-idle: ${DEMO_APP_JDBC_POOL_MIN_SIZE:5}

以上使用${ENV:defauleValue}的形式配置了我們應用的相關參數(shù),如果我們的運行環(huán)境配置了上面用到的環(huán)境變量,則使用環(huán)境變量中的配置,如果沒有配置則使用默認的,比如我配置了環(huán)境變量DEMO_APP_JDBC_POOL_MAX_SIZE = 100,則應用程序中的連接池最大連接數(shù)就變成100了。

配合docker 食用更香哦

3、restful 接口

現(xiàn)在的應用基本上都是前后端分離的,所以后端接口基本上都是restful接口,怎么做吶?

在controller 的class 上增加注解 @RestController,就會生成restful接口

@RestController的作用 相當于@Controller + @ResponseBody

@RestController
@RequestMapping("/api/v1/h5Adapter")
@Api(description = "server-h5-adapter")
public class BaMessageConverterController {

4、@ResponseBody 和 @RequestBody 的區(qū)別

@ResponseBody是作用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,一般在異步獲取數(shù)據(jù)時使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析為跳轉路徑,但是加上 @ResponseBody 后返回結果不會被解析為跳轉路徑,而是直接寫入 HTTP response body 中。 比如異步獲取 json 數(shù)據(jù),加上 @ResponseBody 后,會直接返回 json 數(shù)據(jù)。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。

@RequestBody是作用在形參列表上,用于將前臺發(fā)送過來固定格式的數(shù)據(jù)【xml 格式或者 json等】封裝為對應的 JavaBean 對象,封裝時使用到的一個對象是系統(tǒng)默認配置的 HttpMessageConverter進行解析,然后封裝到形參上。

5、@Schedule

定時任務幾乎是項目的標配了, SpringBoot內置了Sping Schedule定時框架,通過注解驅動方式添加所注解方法到定時任務,根據(jù)配置定時信息定時執(zhí)行

主要是以下兩步:

1、開啟定時器

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableCircuitBreaker
@EnableCaching
@EnableScheduling
public class Application {
?
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
?

2、在方法上加上注解

    //每天凌晨1點執(zhí)行
    @Scheduled(cron = "0 0 1 * * ?")
    public void doTask() {
    
    }

6、async異步調用

異步調用主要處理一些不要求及時返回的任務,springboot提供了支持

SpringBoot中使用 async實現(xiàn)異步調用

基于注解的使用方式包括如下三步:

  1. 啟動類加上@EnableAsync(也可以在配置類中加上)
  2. 配置類中完成異步線程池的導入(這一個可以不要,采用默認的)
  3. 需要異步調用的方法加上@Async

定義線程池

package com.aispeech.bj.bams.msproduct.config;
?
import org.springframework.context.annotation.AdviceMode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
?
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
?
@Configuration
@EnableAsync(mode = AdviceMode.ASPECTJ)
public class ExecutorConfig {
?
    /** Set the ThreadPoolExecutor's core pool size. */
    private int corePoolSize = 10;
    /** Set the ThreadPoolExecutor's maximum pool size. */
    private int maxPoolSize = 300;
    /** Set the capacity for the ThreadPoolExecutor's BlockingQueue. */
    private int queueCapacity = 10;
?
    @Bean
    public Executor myAsync() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("MyExecutor-");
        // rejection-policy:當pool已經(jīng)達到max size的時候,如何處理新任務
        // CALLER_RUNS:不在新線程中執(zhí)行任務,而是有調用者所在的線程來執(zhí)行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
?
}
?

使用異步 @Async 注解

  @Async("myAsync")
    void notifyProductInfo(String thirdPartyId, ThirdPartyProductVO thirdPartyProductVO) {}

7、request 的獲取方式和線程安全

request 是來自前端的請求,怎么才能安全的獲取request,線程安全的request 才能取出正確的數(shù)據(jù),主要有下面幾種方式

1、靜態(tài)類獲取

HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();

2、函數(shù)參數(shù)

Controller中獲取request對象后,如果要在其他方法中(如service方法、工具類方法等)使用request對象,需要在調用這些方法時將request對象作為參數(shù)傳入

此時request對象是方法參數(shù),相當于局部變量,毫無疑問是線程安全的。

@RequestMapping("/test")
    public void test(HttpServletRequest request) {
        ......
    }

3、自動注入

    @Autowired
    private HttpServletRequest request; //自動注入request

對象是線程局部變量(ThreadLocal),因此request對象也是線程局部變量;這就保證了request對象的線程安全性。

不會有線程安全問題的 實際上spring 注入的是一個代理類

到此這篇關于Java Springboot 重要知識點整理匯總的文章就介紹到這了,更多相關Java Springboot 知識點匯總內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot整合Redis的示例

    SpringBoot整合Redis的示例

    這篇文章主要介紹了SpringBoot整合Redis的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • Java設計模式之責任鏈模式(Chain of Responsibility模式)介紹

    Java設計模式之責任鏈模式(Chain of Responsibility模式)介紹

    這篇文章主要介紹了Java設計模式之責任鏈模式(Chain of Responsibility模式)介紹,本文講解了如何使用責任鏈模式,并給出了4種使用實例,需要的朋友可以參考下
    2015-03-03
  • 如何使用新方式編寫Spring MVC接口

    如何使用新方式編寫Spring MVC接口

    這篇文章主要介紹了如何使用新方式編寫Spring MVC接口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Spring boot 配置多個redis的方法示例

    Spring boot 配置多個redis的方法示例

    這篇文章主要介紹了Spring boot 配置多個redis的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解Java中List的正確的刪除方法

    詳解Java中List的正確的刪除方法

    這篇文章主要為大家詳細介紹了Java中List的正確的刪除方法,文中的示例代碼講解詳細,對我們學習有一定幫助,需要的可以參考一下
    2022-05-05
  • 如何手動安裝Gradle并配置IDEA使用Gradle構建

    如何手動安裝Gradle并配置IDEA使用Gradle構建

    本文給大家分享手動安裝Gradle并配置IDEA使用Gradle構建的步驟,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • Struts2學習教程之輸入校驗示例詳解

    Struts2學習教程之輸入校驗示例詳解

    這篇文章主要給大家介紹了關于Struts2學習教程之輸入校驗的相關資料,文中通過示例介紹的非常詳細,對大家學習或者使用struts2具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-05-05
  • SpringBoot限制文件或圖片上傳大小的兩種配置方法

    SpringBoot限制文件或圖片上傳大小的兩種配置方法

    這篇文章主要介紹了SpringBoot限制文件或圖片上傳大小的兩種配置方法,一種是配置在啟動類中,一種是配置在application.yml或者application.properties中,需要的朋友可以參考下
    2018-03-03
  • Java中Gson的使用詳解

    Java中Gson的使用詳解

    這篇文章主要介紹了Java中Gson的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • mybatis如何使用Criteria的and和or進行聯(lián)合查詢

    mybatis如何使用Criteria的and和or進行聯(lián)合查詢

    這篇文章主要介紹了mybatis如何使用Criteria的and和or進行聯(lián)合查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

大埔区| 渝中区| 托里县| 新和县| 临潭县| 祁阳县| 沁水县| 抚顺县| 宁化县| 浠水县| 济阳县| 普安县| 石河子市| 佛学| 金湖县| 喀喇沁旗| 阳城县| 微博| 光山县| 舟山市| 安吉县| 平陆县| 贞丰县| 天台县| 绵阳市| 阳谷县| 无极县| 阿克| 广东省| 环江| 石门县| 乌拉特中旗| 蓬安县| 昂仁县| 福州市| 布尔津县| 潜江市| 吉木乃县| 穆棱市| 溆浦县| 邵阳县|