當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
SpringBoot2尚硅谷笔记
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                SpringBoot2尚硅谷笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                SpringBoot2
網課鏈接 https://www.bilibili.com/video/BV19K4y1L7MT?from=search&seid=18416616320162201024
參考筆記 https://blog.csdn.net/u011863024/article/details/113667634
? https://blog.csdn.net/u011863024/article/details/113667946
官網 https://spring.io/
代碼 https://gitee.com/userwhz/springboot-ssg
SpringBoot2基礎入門
Spring
作用Web開發數據訪問安全控制分布式消息服務移動開發批處理Spring5引入響應式開發基于Java8新特性,如接口默認實現,源碼發生改變SpringBoot
優點創建獨立Spring應該內嵌web服務器 自動starter依賴,簡化構建配置自動配置Spring以及第三方功能提供生產級別的監控,健康檢查及外部化配置無代碼生成,無需編寫xml缺點版本迭代太快封裝太深,內部原理復雜,不容易精通SpringBoot整合Spring技術棧的一站式框架簡化Spring技術棧的快速開發腳手架微服務架構風格一個應用拆分為一組小型服務每個服務都運行在注解的進程內,可以獨立部署和升級服務之間使用輕量級HTTP交互服務圍繞業務功能拆分可以全自動部署機制獨立部署去中心化,服務自治,服務可以使用不用的語言,不同的存儲技術分布式云原生上云的困難- 服務自愈 - 彈性伸縮 - 服務隔離 - 自動化部署 - 灰度發布 - 流量治理SpringBoot2入門
SpringBoot官網 https://spring.io/projects/spring-boot#learn需求:瀏覽發送/hello請求,響應 “Hello,Spring Boot 2”創建maven工程引入依賴<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> </dependencies>編寫主程序類@SpringBootApplication標志主程序類配置文件可以直接設置端口號測試直接運行main簡化部署 默認打包為jar引入插件<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build>報紅需要加上版本號打包package運行cmd java -jar jar包名依賴管理機制
父項目做依賴管理? 幾乎聲明了所有開發中常用的依賴的版本號,自動版本仲裁機制開發導入starter場景啟動器? spring-boot-starter-* : *代表某種場景? 只要引入starter,這個場景的所有常規需要的依賴我們都自動引入? 所有的starter https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters? 見到的 *-spring-boot-starter: 第三方為我們提供的簡化開發的場景啟動器。無需關注版本號,自動版本仲裁1. 引入依賴默認都可以不寫版本 2. 引入非版本仲裁的jar,要寫版本號。可以修改默認版本號1. 查看spring-boot-dependencies里面規定當前依賴的版本 用的 key。 2. 在當前項目里面重寫配置,如下面的代碼。所有場景啟動器最底層的依賴 自動配置的核心依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.3.4.RELEASE</version><scope>compile</scope> </dependency>自動配置特性
自動配好Tomcat? 引入Tomcat依賴? 配置Tomcat<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.3.4.RELEASE</version><scope>compile</scope> </dependency>自動配好SpringMVC? 引入SpringMVC全套組件? 自動配好SpringMVC常用組件(功能)自動配好Web常見功能,如:字符編碼問題? SpringBoot幫我們配置好了所有web開發的常見場景``` public static void main(String[] args) { //1、返回我們IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2、查看容器里面的組件 String[] names = run.getBeanDefinitionNames(); for (String name : names) {System.out.println(name);} } ```默認的包結構? 主程序所在包及其下面的所有子包里面的組件都會被默認掃描進來? 無需以前的包掃描配置? 想要改變掃描路徑? @SpringBootApplication(scanBasePackages=“com.atguigu”)? 或者@ComponentScan 指定掃描路徑@SpringBootApplication等同于@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan("com.atguigu")各種配置擁有默認值? 默認配置最終都是映射到某個類上,如:MultipartProperties? 配置文件的值最終會綁定每個類上,這個類會在容器中創建對象按需加載所有自動配置項? 非常多的starter? 引入了哪些場景這個場景的自動配置才會開啟? SpringBoot所有的自動配置功能都在 spring-boot-autoconfigure 包里面底層注解
@Configuration 配置類注解 (proxyBeanMethods = true)是不是代理bean的方法 默認true spring boot總會檢測組件是否存在如果false 則不是單實例Full(proxyBeanMethods = true)(保證每個@Bean方法被調用多少次返回的組件都是單實例的)(默認) Lite(proxyBeanMethods = false)(每個@Bean方法被調用多少次返回的組件都是新創建的)如果沒有組件依賴,那么調成false可以提高效率@Bean 可以自定義名字 默認方法名 單實例@Component @Controller @Service @Repository@ComponentScan @Import @Import({User.class, DBHelper.class}) 自動創建出這兩個類型的組件、默認組件的名字就是全類名@Conditional 條件裝配 滿足Conditional指定的條件,則進行組件注入 不滿足則不注入@ImportResource("classpath:beans.xml") 遷移xml文件 容器將導入組件@ConfigurationProperties 配置綁定 (prefix = "mycar") 前綴 加到@Component配置類加屬性綁定 @EnableAutoConfiguration 把組件自動注入到容器 + @ConfigurationProperties自動配置(源碼分析)
@SpringBootApplication等同于- @SpringBootConfiguration 配置類- @EnableAutoConfiguration ? @AutoConfigurationPackage 自動配置包? 利用Registrar給容器中導入一系列組件? 將指定的一個包下的所有組件導入進MainApplication所在包下。? @Import({AutoConfigurationImportSelector.class})? 1)利用getAutoConfigurationEntry(annotationMetadata) 給容器中批量導入一些組件? 2)調用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)? 獲取到所有需要導入到容器中的配置類? 3)利用工廠加載 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的組件? 4)從META-INF/spring.factories位置來加載一個文件。? 默認掃描我們當前系統里面所有META-INF/spring.factories位置的文件? spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories? # 文件里面寫死了spring-boot一啟動就要給容器中加載的所有配置類 - @ComponentScan 指定掃描哪些Spring注解。SpringBoot先加載所有的自動配置類 xxxxxAutoConfiguration每個自動配置類按照條件進行生效,默認都會綁定配置文件指定的值。(xxxxProperties里面讀取,xxxProperties和配置文件進行了綁定)生效的配置類就會給容器中裝配很多組件只要容器中有這些組件,相當于這些功能就有了定制化配置? 用戶直接自己@Bean替換底層的組件? 用戶去看這個組件是獲取的配置文件什么值就去修改。xxxxxAutoConfiguration —> 組件 —> xxxxProperties里面拿值 ----> application.properties開發步驟
1)引入依賴2)查看自動配置了哪些 選做自己分析 配置文件中debug=true開啟自動配置報告3)是否需要修改參照文檔修改配置項https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#common-application-properties? 自己分析。xxxxProperties綁定了配置文件的哪些。自定義加入或者替換組件? @Bean、@Component…自定義器 XXXXXCustomizer;開發小技巧
Lombok簡化開發引入依賴安裝插件@Data 生成get和set方法@ToString@AllArgsConstructor 全參構造器@NoArgsConstructor 無參構造器@EqualsAndHashCode@Slf4j log.info("日志信息")熱更新<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency> </dependencies>ctrl + f9 項目重啟Spring Initailizrstatic 靜態資源templates 頁面SpringBoot2核心功能
配置文件
propertiesyaml/yml標記語言適合以數據為中心的配置文件基本語法- key: value kv之間有空格 - 區分大小寫 - 使用縮進表示層級關系 - 縮進不允許使用tab,只允許空格 - 縮進的空格數不重要,只要相同層級的元素左對齊即可 - '#'表示注釋 - 字符串無需加引號,如果要加,單引號’’,雙引號""表示字符串內容會被 轉義,不轉義Spring Boot Configuration Annotation Processor not configured 問題解決<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>打包時去除依賴<exclude><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId> </exclude>web開發
SpringMVC自動配置
大多場景我們都無需自定義配置- 內容協商視圖解析器和BeanName視圖解析器 - 靜態資源(包括webjars) - 自動注冊 `Converter,GenericConverter,Formatter`- 支持 `HttpMessageConverters` (后來我們配合內容協商理解原理)- 自動注冊 `MessageCodesResolver` (國際化用) - 靜態index.html 頁支持- 自定義 `Favicon` - 自動使用 `ConfigurableWebBindingInitializer` ,(DataBinder負責將請求數據綁定到JavaBean上)靜態資源訪問
靜態資源目錄靜態資源放在類路徑下: called `/static` or `/public` or `/resources` or `/META-INF/resources`訪問:當前項目根路徑/ + 靜態資源名原理: 靜態映射/**請求進來,先去找Controller看能不能處理。不能處理的所有請求又都交給靜態資源處理器。靜態資源也找不到則響應404頁面。改變默認的靜態資源路徑,/static,/public,/resources, /META-INF/resources失效resources: static-locations: [classpath:/haha/]spring: ? mvc: ? static-path-pattern: /res/**靜態資源訪問前綴當前項目 + static-path-pattern + 靜態資源名 = 靜態資源文件夾下找歡迎頁支持
靜態資源路徑下 index.html- 可以配置靜態資源路徑 - 但是不可以配置靜態資源的訪問前綴。否則導致 index.html不能被默認訪問controller能處理/index請求參數處理
@xxxMapping;- @GetMapping - @PostMapping - @PutMapping - @DeleteMapping用法- 開啟頁面表單的Rest功能 - 頁面 form的屬性method=post,隱藏域 _method=put、delete等(如果直接get或post,無需隱藏域) - 編寫請求映射常用參數注解@PathVariable 路徑變量@RequestHeader 獲取請求頭信息@RequestParam 獲取請求參數(指問號后的參數) @CookieValue 獲取Cookie值@RequestAttribute 獲取request域屬性@RequestBody 獲取請求體[POST]@MatrixVariable 矩陣變量@ModelAttribute視圖解析與模板引擎
SpringBoot默認不支持JSP,需要引入第三方模板引擎技術實現頁面渲染引入依賴頁面放/templates下面server: ? servlet: ? context-path: /app *#設置應用名*這個設置后,URL要插入`/app`, 如`http://localhost:8080/app/hello.html`攔截器
登錄檢查與靜態資源放行編寫一個攔截器實現HandlerInterceptor接口攔截器注冊到容器中(實現WebMvcConfigurer的addInterceptors())指定攔截規則(注意,如果是攔截所有,靜態資源也會被攔截)目標方法執行之前 目標方法執行完成以后 頁面渲染以后攔截器注冊到容器中 && 指定攔截規則@Configuration public class AdminWebConfig implements WebMvcConfigure文件上傳
文件上傳相關的配置類:org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration org.springframework.boot.autoconfigure.web.servlet.MultipartPropertiesspring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=100MB錯誤處理
- 默認情況下,Spring Boot提供`/error`處理所有錯誤的映射 - 機器客戶端,它將生成JSON響應,其中包含錯誤,HTTP狀態和異常消息的詳細信息。對于瀏覽器客戶端,響應一個“ whitelabel”錯誤視圖,以HTML格式呈現相同的數據要對其進行自定義,添加View解析為error要完全替換默認行為,可以實現 ErrorController并注冊該類型的Bean定義,或添加ErrorAttributes類型的組件以使用現有機制但替換其內容。/templates/error/下的4xx,5xx頁面會被自動解析原生組件注入
@WebServlet@WebFilter@WebListener還要在主啟動類添加注解`@ServletComponentScan`Spring方式注入ServletRegistrationBean`, `FilterRegistrationBean`, and `ServletListenerRegistrationBean定制化原理
定制化的常見方式1)修改配置文件2)xxxxxCustomizer3)編寫自定義的配置類 xxxConfiguration + @Bean替換、增加容器中默認組件,視圖解析器4)Web應用 編寫一個配置類實現 WebMvcConfigurer 即可定制化web功能 + @Bean給容器中再擴展一些組件5)@EnableWebMvc + WebMvcConfigurer — @Bean 可以全面接管SpringMVC,所有規則全部自己重新配置; 實現定制和擴展功能(高級功能)。數據訪問
數據源的自動配置導入JDBC依賴導入了數據源jdbc事務但沒有導入驅動(不知道要操作的數據庫)導入mysql驅動相關數據源配置類 自動配置的類DataSourceAutoConfiguration : 數據源的自動配置。修改數據源相關的配置:spring.datasource。數據庫連接池的配置,是自己容器中沒有DataSource才自動配置的。底層配置好的連接池是:HikariDataSource。DataSourceTransactionManagerAutoConfiguration: 事務管理器的自動配置。JdbcTemplateAutoConfiguration: JdbcTemplate的自動配置,可以來對數據庫進行CRUD。@Bean @Primary JdbcTemplate:Spring容器中有這個JdbcTemplate組件,使用@Autowired。JndiDataSourceAutoConfiguration: JNDI的自動配置。XADataSourceAutoConfiguration: 分布式事務相關的。Spring Boot整合第三方技術的兩種方式:- 自定義 - 找starter場景使用Druid數據源<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version> </dependency>配置Druid數據源druid數據源starter整合方式<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version> </dependency>配置文件配置整合Mybatis引入依賴<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version> </dependency>全局配置文件SqlSessionFactory:自動配置好了SqlSession:自動配置了SqlSessionTemplate 組合了SqlSession@Import(AutoConfiguredMapperScannerRegistrar.class)Mapper: 只要我們寫的操作MyBatis的接口標準了@Mapper就會被自動掃描進來導入MyBatis官方Starter。編寫Mapper接口,需@Mapper注解。編寫SQL映射文件并綁定Mapper接口。在application.yaml中指定Mapper配置文件的所處位置,以及指定全局配置文件的信息 (建議:配置在mybatis.configuration)。整合MyBatis-注解配置混合整合Mybatis Plus引入依賴<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version> </dependency>MybatisPlusAutoConfiguration配置類,MybatisPlusProperties配置項綁定。SqlSessionFactory自動配置好,底層是容器中默認的數據源。mapperLocations自動配置好的,有默認值classpath*:/mapper/**/*.xml,這表示任意包的類路徑下的所有mapper文件夾下任意路徑下的所有xml都是sql映射文件。 建議以后sql映射文件放在 mapper下。容器中也自動配置好了SqlSessionTemplate。@Mapper 標注的接口也會被自動掃描,建議直接 @MapperScan("com.lun.boot.mapper")批量掃描。MyBatisPlus優點之一:只需要我們的Mapper繼承MyBatisPlus的BaseMapper 就可以擁有CRUD能力,減輕開發工作。整合RedisRedisAutoConfiguration自動配置類,RedisProperties 屬性類 --> spring.redis.xxx是對redis的配置。連接工廠LettuceConnectionConfiguration、JedisConnectionConfiguration是準備好的。自動注入了RedisTemplate<Object, Object>,xxxTemplate。自動注入了StringRedisTemplate,key,value都是String底層只要我們使用StringRedisTemplate、RedisTemplate就可以操作Redis。單元測試
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit VintageJUnit Platform: Junit Platform是在JVM上啟動測試框架的基礎,不僅支持Junit自制的測試引擎,其他測試引擎也都可以接入。JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的編程模型,是JUnit5新特性的核心。內部包含了一個測試引擎,用于在Junit Platform上運行。JUnit Vintage: 由于JUint已經發展多年,為了照顧老的項目,JUnit Vintage提供了兼容JUnit4.x,JUnit3.x的測試引擎。SpringBoot 2.4 以上版本移除了默認對 Vintage 的依賴。如果需要兼容JUnit4需要自行引入(不能使用JUnit4的功能 @Test)JUnit 5’s Vintage已經從spring-boot-starter-test從移除。如果需要繼續兼容Junit4需要自行引入Vintage依賴:引入依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> </dependency>@SpringBootTest 常用測試注解@Test:表示方法是測試方法。但是與JUnit4的@Test不同,他的職責非常單一不能聲明任何屬性,拓展的測試將會由Jupiter提供額外測試@ParameterizedTest:表示方法是參數化測試。@RepeatedTest:表示方法可重復執行。@DisplayName:為測試類或者測試方法設置展示名稱。@BeforeEach:表示在每個單元測試之前執行。@AfterEach:表示在每個單元測試之后執行。@BeforeAll:表示在所有單元測試之前執行。@AfterAll:表示在所有單元測試之后執行。@Tag:表示單元測試類別,類似于JUnit4中的@Categories。@Disabled:表示測試類或測試方法不執行,類似于JUnit4中的@Ignore。@Timeout:表示測試方法運行如果超過了指定時間將會返回錯誤。@ExtendWith:為測試類或測試方法提供擴展類引用。斷言機制這些斷言方法都是org.junit.jupiter.api.Assertions的靜態方法。檢查業務邏輯返回的數據是否合理。所有的測試運行結束以后,會有一個詳細的測試報告。簡單斷言方法 說明assertEquals 判斷兩個對象或兩個原始類型是否相等assertNotEquals 判斷兩個對象或兩個原始類型是否不相等assertSame 判斷兩個對象引用是否指向同一個對象assertNotSame 判斷兩個對象引用是否指向不同的對象assertTrue 判斷給定的布爾值是否為 trueassertFalse 判斷給定的布爾值是否為 falseassertNull 判斷給定的對象引用是否為 nullassertNotNull 判斷給定的對象引用是否不為 null數組斷言通過 assertArrayEquals 方法來判斷兩個對象或原始類型的數組是否相等。組合斷言`assertAll()`方法接受多個 `org.junit.jupiter.api.Executable` 函數式接口的實例作為要驗證的斷言,可以通過 lambda 表達式很容易的提供這些斷言。異常斷言在JUnit4時期,想要測試方法的異常情況時,需要用`@Rule`注解的`ExpectedException`變量還是比較麻煩的。而JUnit5提供了一種新的斷言方式`Assertions.assertThrows()`,配合函數式編程就可以進行使用。超時斷言JUnit5還提供了Assertions.assertTimeout()為測試方法設置了超時時間。快速失敗通過 fail 方法直接使得測試失敗。前置條件Unit 5 中的前置條件(assumptions【假設】)類似于斷言,不同之處在于不滿足的斷言assertions會使得測試方法失敗,而不滿足的前置條件只會使得測試方法的執行終止。前置條件可以看成是測試方法執行的前提,當該前提不滿足時,就沒有繼續執行的必要。嵌套測試JUnit 5 可以通過 Java 中的內部類和`@Nested` 注解實現嵌套測試,從而可以更好的把相關的測試方法組織在一起。在內部類中可以使用`@BeforeEach` 和`@AfterEach`注解,而且嵌套的層次沒有限制。參數化測試參數化測試是JUnit5很重要的一個新特性,它使得用不同的參數多次運行測試成為了可能,也為我們的單元測試帶來許多便利。利用@ValueSource等注解,指定入參,我們將可以使用不同的參數進行多次單元測試,而不需要每新增一個參數就新增一個單元測試,省去了很多冗余代碼。利用**@ValueSource**等注解,指定入參,我們將可以使用不同的參數進行多次單元測試,而不需要每新增一個參數就新增一個單元測試,省去了很多冗余代碼。@ValueSource: 為參數化測試指定入參來源,支持八大基礎類以及String類型,Class類型@NullSource: 表示為參數化測試提供一個null的入參@EnumSource: 表示為參數化測試提供一個枚舉入參@CsvFileSource:表示讀取指定CSV文件內容作為參數化測試入參@MethodSource:表示讀取指定方法的返回值作為參數化測試入參(注意方法返回需要是一個流)當然如果參數化測試僅僅只能做到指定普通的入參還達不到讓我覺得驚艷的地步。讓我真正感到他的強大之處的地方在于他可以支持外部的各類入參。如:CSV,YML,JSON 文件甚至方法的返回值也可以作為入參。只需要去實現**ArgumentsProvider**接口,任何外部文件都可以作為它的入參。高級特性
Profile環境切換為了方便多環境適配,Spring Boot簡化了profile功能。配置加載優先級外部配置源Java屬性文件。YAML文件。環境變量。命令行參數。配置文件查找位置classpath 根路徑。classpath 根路徑下config目錄。jar包當前目錄。jar包當前目錄的config目錄。/config子目錄的直接子目錄。配置文件加載順序:當前jar包內部的application.properties和application.yml。當前jar包內部的application-{profile}.properties 和 application-{profile}.yml。引用的外部jar包的application.properties和application.yml。引用的外部jar包的application-{profile}.properties和application-{profile}.yml。指定環境優先,外部優先,后面的可以覆蓋前面的同名配置項。自定義starter總結
以上是生活随笔為你收集整理的SpringBoot2尚硅谷笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PDF书籍
- 下一篇: Cocos2d之Box2d基础知识
