springboot學習小記

思惟導圖:https://www.edrawsoft.cn/viewer/public/s/72a06689197636java

1.springboot是一個快速整合第三方框架,簡化XML配置徹底採用註解化,內置http服務器(jetty和tomcat),最總以java應用程序進行執行(默認端口8080)web

2.@RestController表示該類中的全部方法返回json字符創(@Controller+@ResponseBody)redis

3.springboot啓動
啓動原理:springmvc註解方式啓用,內置http服務器(默認是tomcat)
啓動方式:@SpringbootApplication註解在含有main方法的根類上(最簡單方式)spring

4.配置文件:
springboot項目的pom文件須要引入父類依賴spring-boot-starter-parent整合第三方經常使用框架依賴信息
springboot整合springmvc須要引入spring-boot-starter-web使用maven依賴繼承關係整合
maven啓動springboot項目須要指定jar的主函數入口spring-boot-maven-pluginsql

5.小項目使用AOP統一處理web請求日誌(@Before/@After/@AfterReturning)
備註:小項目通常把日誌半年左右遷移到雲備份nosql數據庫中。傳統方法把日誌寫到磁盤上有很大缺點,可以使用分佈式日誌收集系統(kafka/chukwa/Flume/Lagstash)數據庫

6.springboot建立GlobalException(加註解@ControllerAdvice(basePackages="com.it.conttoller")指定掃包範圍)來捕獲全局異常編程

7.lombok底層使用字節碼技術ASM修改字節碼文件生成get、set方法等,編譯後仍是會生成對應方法,簡化代碼(@Data=@Gatter+@Setter)
備註:下載好的jar包放到eclipse安裝目錄中,eclipse.ini最下面添加配置:-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar,pom中加入依賴json

8.使用@EnableAsync就能夠使用多線程,寫在@SpringBootApplication(spring項目啓動類)或者@Configuration(spring項目配置類)上,AsyncRestTemplate異步非阻塞發送http請求緩存

9.使用@Async就能夠定義一個線程任務。經過spring給咱們提供的ThreadPoolTaskExecutor就能夠使用線程池
--類內部調用不會實現異步(經過spring代理機制實現異步,類內調用不走代理機制),及@Async放在private方法上面不生效
--返回值爲void和Future能夠,返回對象爲null,返回基本類型報錯AopInvocationException

10.@Value自定義參數注入,項目啓動時加載,加載順序在static資源後面tomcat

11.spring項目多環境配置:多application-**.properties,單application.properties,經過spring.profiles.active=**指定項目使用的配置文件

12.springboot整合mybatis注意事項:mapper層不須要添加註解,可是必定要在啓動類上加上@MapperScan(basePackages={"com.*.mapper1","com.*.mapper2"}),就不用在每一個mapper上加@Mapper

13.springboot默認集成事務,只須要在方法上加@Transactional就行(不須要@EnableTractional),方法執行完才能在數據庫看到效果
spring事務分類:聲明事務和編程事務;事務原理:AOP技術環繞通知進行攔截;注意事項:不要try,拋出給外層

14.springboot整合多數據源:分包名和註解方式,須要自定義數據源鏈接信息
多數據源事務不能只寫@Transactional,須要用@Transactional(transactionManager="**1")指定對應自定義數據源中的事務管理器

15.devtools熱部署原理:使用類加載器(classloader)從新讀取字節碼文件到jvm內存,有2個classloader,一個加載不會改變的第三方jar包,一個加載會改變的類,代碼修改後,第二個classloader被丟棄從新建立一個classloader,實現較快重啓
手寫熱部署功能:監聽class文件是否發生改變(版本號或者修改時間),若是class文件發生改變就是用classloader從新讀取
熱部署不推薦在生產環境使用(防止集羣環境不一樣服務器讀取的字節碼不一樣,大項目會特別佔用內存很卡),通常用於本地開發提升效率

16.springboot性能優化
1)掃包優化:默認使用@SpringbootApplication(等同@Configuration+@EnableAutoConfiguration+@ConponentScan)會觸發自動配置和組件掃描(遞歸掃包),啓動時間長,加載了多餘的實例和CPU消耗
2)JVM參數調優(減小垃圾回收次數):-XX:+PrintGCDetails -Xmx512M -Xms512M(打印詳細GC日誌,最大堆內存和初始堆內存,默認4G),過小會頻繁觸發GC
設置方式:1.內部運行設置在eclipse中的VM agments設置;2.外部運行設置用 java server -Xms512M -Xms512M -jar xxx.jar
3)默認tomcat容器修改成undertow(tomcat吞吐量5000undertow8000)

17.監控中心
針對微服務服務監控,服務器內存變化(堆內存、線程、日誌管理等)、監測服務配置鏈接地址是否可用(模擬訪問、懶加載)、統計如今容器中
多少個bean、統計springmvc中@RequestMapping(統計http接口數)。
AdminUi底層使用Actuator監控(沒有界面,返回json)實現可視化界面

18.@Scheduled(initialDelay=1000, fixedDelay=2000)實現定時任務
--集羣/負載均衡環境使用Quartz單獨出來一個項目
注意:一、在Application.java同級及子集路徑下;2.Application上添加@EnableScheduling

19.@Cacheable、@CachePut、@CacheEvict、@CacheConfig @CacheConfig:一次性聲明@Cacheable()裏面都有一個value=「xxx」的屬性 @CachEvict:的做用 主要針對方法配置,可以根據必定的條件對緩存進行清空 @CachePut:確保方法被執行,返回值記錄到緩存中 @Cacheable:重複使用相同參數調用方法,方法自己不會被執行,方法的結果直接從緩存中找到 總結:@CachePut和@Cacheable這兩個標籤能夠結合使用,當須要根據請求改變值的時候,利用@CachePut將值改變並寫入到緩存中,而@Cacheable標籤除了第一次以外,一直是取的緩存的值。注意結合使用時須要注意兩點: 一、必須是同一個緩存實例。 二、key值必須是相同的。 註解失效時間+主動刷新緩存:https://blog.csdn.net/huanghongfei1/article/details/61195650 定時清除緩存: @Scheduled(cron="0 0,30,* * * ?") @CacheEvict(cacheNames="aa",allEntries=true) --集羣環境可以使用成熟緩存服務器,好比redis springboot常見問題解決方案: 待續...

相關文章
相關標籤/搜索