什麼是SpringBoot

来源:https://www.cnblogs.com/haizai/archive/2019/05/14/10864883.html
-Advertisement-
Play Games

隨著動態語言的流行(Ruby,Groovy,Scala,Node.js),Java的開發顯得格外的笨重;繁多的配置,低下的開發效率,複雜的部署流程以及第三方技術集成難度大. 在上述環境 下,Spring Boot應運而生.它使用"習慣優於配置"(項目中存在大量的配置,此外還內置一個習慣性的配置,讓你 ...


隨著動態語言的流行(Ruby,Groovy,Scala,Node.js),Java的開發顯得格外的笨重;繁多的配置,低下的開發效率,複雜的部署流程以及第三方技術集成難度大.

在上述環境 下,Spring Boot應運而生.它使用"習慣優於配置"(項目中存在大量的配置,此外還內置一個習慣性的配置,讓你無須手段進行配置)的理念讓你的項目快速運行起來.

使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器),準生產級別的基於Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置.

Spring Boot的優缺點

優點 :

(1) 快速構建項目;

(2) 對主流開發框架的無配置集成;

(3) 項目可獨立運行,無須外部依賴 Servlet容器;

(4) 提供運行時的應用監控;

(5) 極大地提高了開發,部署效率;

(6) 與雲計算的天然集成.

缺點 :

(1) 書籍文檔少且不夠深入;

(2) 如果你不認同Spring框架,這也許是它的缺點,但建議你一定要使用Spring框架.

快速入門

設置Spring boot的parent

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.2.RELEASE</version>

</parent>

說明 : Spring Boot的項目必須要將parent設置為Spring boot的parent, 該parent包含了大量的預設的配置,大大簡化了我們的開發.

導入Spring Boot的web支持

<dependency>

<groupId>org.springframework.book</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

添加Spring Boot的插件

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

編寫第一個Spring Boot的應用

@Controller

@SpringBootApplication

@Configuration

public class HelloApplication {

@RequestMapping("hello")

@ResponseBody

public String hello() {

return "hello world!";

}

public static void main(String[] args) {

SpringApplication.run(HelloApplication.class, args);

}

}

代碼說明 :

1 : @SpringBootApplication : Spring Boot項目的核心註解, 主要目的是開啟自動配置;

2 : @Configuration : 這是一個配置Spring的配置類;

3 : @Controller : 標明這是一個SpringMVC的Controller控制器;

4 : main方法 : 在main方法中啟動一個應用,既 : 這個應用的入口;

啟動應用

在Spring Boot項目中,啟動的方式有兩種,一種是直接run Java Application另外一種是通過Spring Boot的Maven插件運行.

Spring Boot的核心

入口類和@SpringBootApplication

Spring Boot的項目一般都會有*Application的入口類,入口類中會有main方法,這是一個標準的Java應用程式的入口方法.

@SpringBootApplication註解是Spring Boot的核心註解,它其實是一個組合註解;

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@SpringBootConfiguration

@EnableAutoConfiguration

@ConmpnentScan(excludeFilters = {

@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)

})

public @interface SpringBootApplication {}

該註解主要組合了以下註解 :

1 : @SpringBootConfiguration : 這是Spring Boot項目的配置註解,這也是一個組合註解 :

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Configuration

public @interface SpringBootConfiguration{}

在Spring Boot項目中推薦使用@SpringBootConfiguration替代@Configuration

2 : @EnableAutoConfiguration : 啟用自動配置,該註解會使Spring Boot根據項目中依賴的jar包自動配置項目的配置項 :

a) 如 : 我們添加了Spring-boot-starter-web的依賴,項目中也就會引入SpringMVC的依賴,Spring Boot就會自動配置tomcat和SpringMVC

spring-boot-starter-web : 1.5.2.RELEASE[compile]

spring-boot-starter : 1.5.2.RELEASE[compile]

spring-boot-starter-tomcat : 1.5.2.RELEASE[compile]

tomcat-embed-core : 8.5.11[compile]

tomcat-embed-el : 8.5.11[compile]

tomcat-embed-websocked : 8.5.11[compile]

tomcat-embed-core : 8.5.11(omitted for conflict with 8.5.11)[compile]

hibernate-vaildator : 5.3.4.Final[compile]

jackson-databind : 2.8.7[compile]

spring-web : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

spring-webmvc : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

3 : @ComponentScan : 預設掃描@SpringBootApplication所在類的同級目錄以及它的子目錄.

關閉自動配置

Spring Boot會根據項目中的jar包依賴,自動做出配置,Spring Boot支持的自動配置(非常多);

比如 : 我們不想自動配置Redis,想手動配置.

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})

public class HelloApplication {

}

如果不想看到banner,可以將其關閉 :

public static void main(Stirng[] args) {

SpringApplication app = new SpringApplication(HelloApplication.class, args);

app.setBannerMode(Banner.Mode.OFF); //關閉banner

app.run-正在西部數位(www.west.cn)進行交易(args);

}

Spring Boot項目使用一個全局的配置文件application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。

1、 修改tomcat的埠為8088(server.port=8088)

2、 修改進入DispatcherServlet的規則為:*.html(server.servlet.path=*.html)

Xml配置文件

Spring Boot提倡零配置,既無xml配置,但是在實際項目中,可能有一些特殊要求你 必須使用 xml配置,這時我們可以通過Spring提供的@ImportResource來載入xml配置,

例如 :

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

日誌

Spring Boot對各種日誌框架都支持,通過配置修改預設的日誌的配置 :

#設置日誌級別

logging.level.org.springframework=DEBUG

格式 :

logging.level.*= # log levels serverity. For instance 'logging.level.org.springframework=DEBUG'

Spring Boot的自動配置的原理

Spring Boot在進行SpringApplication對象實例化時會載入META-INF/spring.factories文件,將該配置文件中的配置載入到Spring容器.

進入規則為 /

如果進入SpringMVC的規則為/時,Spring Boot的預設靜態資源的路徑為:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

進入規則為*.xxx 或者 不指定靜態文件路徑時

將靜態資源放置到webapp下的static目錄中即可通過地址訪問:

自定義SpringMVC的配置

有些時候我們需要自已配置SpringMVC而不是採用預設,比如說增加一個攔截器,這個時候就得通過繼承WebMvcConfigurerAdapter然後重寫父類中的方法進行擴展。

在Spring Boot中推薦使用@Transaction註解來申明事務.

首先需要導入依賴 :

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

當引入jdbc依賴之後,Spring Boot會自動預設分別註入DataSourceTransactionManager或JpaTransactionManager,所以我們不需要任何額外配置就可以用@Transactional

註解進行事務使用.

例如 :

在service中添加@Transactional註解 :

發佈到獨立的tomcat中運行

在開發階段我們推薦使用內嵌的tomcat進行開發,因為這樣會方便很多,但是到生成環境,我們在獨立的tomcat容器中運行,因為我們需要對tomcat做額外的優化,這時我們

需要將工程打成war包進行發佈到外部的tomcat裡面.

工程的打包方式為war

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.2.RELEASE</version>

<parent>

<groupId>com.taotao.cart</groupId>

<artifactId>taotao-cart-springboot</artifactId>

<version>1.0.0-SNAPSHOT</versio>

<packageing>war</packageing>

將spring-boot-starter-tomcat的範圍設置為provided

設置為provided是打包時會將該包排除,因為要放到獨立的tomcat中運行,是不需要的.

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

修改代碼,設置啟動配置

需要集成SpringBootServletInitializer,然後重寫configure,將Spring Boot的入口類設置進去.

需要啟動類繼承需要集成SpringBootServletInitializer

@Configuration

@PropertySource(value = {"classpath:jdbc.properties", "classpath:env.properties", "classpath:httpclient.properties"})

@ComponentScan(basePackages = "con.taotao")

@ImportResource(value = "classpath:dubbo/dubbo-consumer.xml") // dubbo的配置文件,將dubbo整合到spring容器中

@SpringBootApplication

public class TaobaoApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

// 設置啟動類,用於獨立tomcat運行的入口

return builder.sources(TaotaoApplication.class);

}

}

maven命令 : clean package // 把項目打包成war包.

把打包成war的項目放到tomcat的webapps的ROOT裡面,並解壓.

 

在配置Mybatis時使用java配置

@Configuration

@AutoConfiureAfter(MyBatisConfig.class) // 保證在MyBatisConfig實例化之後再實例化該類

public class MapperScannerConfig {

// mapper介面的掃描器

@Bean

public MapperScannerConfigurer mapperScannerConfigurer() {

MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

mapperScannerConfigurer.setBasePackage("com.taotao.cart.mapper");

return mapperScannerConfigurer;

}

}

全局捕獲異常

1. 新建一個Class,這裡取名為GlobalDefaultExceptionHandler;

2. 在class上添加註解,@ControllerAdvice;

3. 在class中添加一個方法;

4. 在方法上添加@ExceptionHandler攔截相應的異常信息;

5. 如果返回的是View -- 方法的返回值是ModelAndView;

6. 如果返回的是String或者是Json數據,那麼需要在方法上添加@ResponseBody註解


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 偶然間知道到了字體反爬這個東西, 所以決定瞭解一下. 目標: https://maoyan.com/board/1 問題: 類似下圖中的票房數字無法獲取, 直接複製粘貼的話會顯示 □ 等無法識別的字元, 且網頁源碼中該類數字均被 &#xee5e;&#xe33d;&#xee5e;&#xec69;.&# ...
  • 11.1 集合元素的映射-map映射操作 11.1.1 看一個實際需求 要求:請將List(3,5,8)中所有的元素都*2,將其結果放到一個新的集合中返回,即返回一個新的List(6,10,16),請編寫程式實現 11.1.2 map映射操作 11.1.3 使用傳統方法 -案例演示 -上述案例演示的 ...
  • 1. 十次方中的前端知識點隨記 好久沒上傳筆記了,主要最近的筆記都零零散散,知識點也不集中,就不傳了;最近項目想用到前後端分離,而且前端我也想參與下,就先基本的學一遍,記點零星的筆記,各位能從中看到有用的東西最好 1.1. Node.js 1.1.1. node基本使用 1. 查看 中文文檔地址 v ...
  • 2.1 註意不同類型轉換 2.2 2.3 2.4 使用 迴圈 每次對 個位 取數相加 取數後 除以10 使前一位 變為 個位 繼續 判斷小於等於0時停止 2.5 註意 System.currentTimeMillis()方法 返回 long 形 需要轉換為 int 形 2.6 a 不能為 0 b2 ...
  • 5.14自我總結 一.python插件插件相關技巧彙總 安裝在cmd上運行 二.PyCharm的安裝註意事項 1.激活碼 可以網上找 2.對於當中的Python的設置 對於python的路徑不能選擇系統預設,要手動輸入python.exe的路徑 3.字體設置以及快捷設置 點擊File→setting ...
  • 介紹 jar命令用來對*.class文件進行壓縮,從而生成jar(archive)歸檔文件,避免文件過多. 定義一個文件: 編譯後,生成包.類,然後將這個common包進行壓縮為jar文件.輸入下麵命令: 列印如下: 當我們想往my.jar添加其它包的時候,輸入: 如果想解壓jar包,則輸入: 當我 ...
  • 1、封裝類似lower()的函數 2、封裝類似upper()的函數 3、封裝類似find()的函數 4、封裝類似rfind()的函數 5、封裝功能類似isdigit()的函數 6、封裝功能類似partition()的函數 ...
  • day23 01 類的命名空間 一、初識面向對象複習 定義類: class 函數:方法 動態屬性 變數:類屬性 靜態屬性 過程: (1)_init_方法:初始化:def _init_(self,參數) python幫我們創建了一個對象self 每當我們調用類的時候就會自動觸發這個方法 在_init_ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...