Spring全家桶

(一)初識Spring

1.spring家族的主要成員

始於框架,但不止於框架,涉及到各行業

Spring Framework(用於構建企業級應用的輕量級一站式解決方案)

設計理念:

  1. 力爭讓選擇無處不在
  2. 體現海納百川的精神
  3. 保持向後兼容性
  4. 專注APi設計
  5. 追求嚴苛的代碼質量

Spring Boot(快速構建基於spring的應用程序)

  1. 快、很快、非常快
  2. 進可開箱即用、退可按需改動
  3. 提供各種非功能特性
  4. 不用生成代碼,沒有XML配置

Spring Cloud(簡化了分佈式系統的開發)

  1. 配置管理
  2. 服務註冊與發現
  3. 熔斷
  4. 服務追蹤

2.跟着spring瞭解技術趨勢(spring boot、spring cloud)

3.編寫第一個spring應用程序

actuator檢測接口是否正常、是否是模板、查看容器創建的beans

(二)數據操作

1.JDBC必知必會

DataSourceAutoConfiguration 配置 DataSource

DataSourcreTransactiopnManagerAutoConfiguration 配置 DataSourceTransactionManager

JdbcTemplateAutoConfiguration 配置 JabdTemplate

數據源相關配置:

1.通用

  • spring.datasource.url=jdbc:mysql://localhost/test
  • spriing.datasource.usename=root
  • spring.datasource.password=root
  • spring.datasource.driver-class-name=com.mysql.jdbc.Driver(可選,spring boot根據數據庫url進行選擇合適驅動)

2.初始化內嵌數據庫

  • spring.datasource.initialization-mode=embeddeb | always | never
  • spring.datasource.schema與spring.datasource.data確定初始化sql文件
  • spring.datasource.platform=hsqldb | h2 | oracle | mysql | sql server

3.多數據源配置

4.好用的驅動數據源(可靠性、性能、功能、可運維性、可擴展性、其它【社區活躍、更新】)

spring boot 2.x默認使用HikaraCP

spring boot 1.x默認使用tomcat連接池,如果使用其它的連接池,需要移除tomcat-jdbc依賴

HikariCP

  速度提升:

  1. 字節碼級別優化(很多方法通過JavaAssist編譯時生成)
  2. 用FastStatementList代替ArrayList
  3. 無鎖集合ConcurrentBag(併發時性能更好)
  4. 代理類的優化(用invokestatic代替了invokevirtual)

  常見的配置:(看源碼DatasourceConfiguration.class)

  1. spring.datasource.hikara.maximumPoolSize=10(數據庫連接池大小)
  2. spring.datasource.hikari.minimumldle=10.(idle連接個數)
  3. spring.datasource.hikari.idleTimeout=600000.(idle連接超時)
  4. spring.datasource.hikari.connectionTimeout=30000.(連接超時)
  5. spring.datasource.hikari.maxLifetime=1800000.(最大的生命時間)

Alibaba Druid(內置強大的監控功能,監控特性不影響性能;能防止sql注入,內置Logging能診斷Hack入侵應用行爲;spring boot2.x需要在spring-jdbc包中排除HikariCP連接池)

  使用功能:

  1. 詳細的監控
  2. ExceptionnSorter,針對主流數據庫的返回碼都有支持
  3. SQL防注入
  4. 內置加密配置
  5. 衆多擴展點,方便進行定製(可以實現連接前後增添一些業務邏輯[比如:繼承FilterEventAdapter,重寫連接前後方法])

  配置:(依賴gruid-spring-boot-starter)

  • spring.datasource.url=jdbc:mysql://localhost/test
  • spriing.datasource.usename=root
  • ###密碼加密
  • spring.datasource.password=加密密碼
  • spring.datasource.druid.filter.conifg.enabled=true
  • spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
  • ###filter配置 全部使用默認配置
  • spring.datasource.druid.filters=stat,config,slf4j,wall 
  • ###sql防注入
  • spring.datasource.druid.filters.wall.enbled=true
  • spring.datasource.druid.filters.wall.db-type=h2
  • spring.datasource.druid.filters.wall.config.delete-allow=false
  • spring.datasource.druid.filters.wall.config.drop=table-allow=-false
  •  
  • spring.datasource.druid.initial-size=5(初始連接池大小)
  • spring.datasource.druid.max-active=5(最大活躍數)
  • spring.datasource.druid.min-idle=5(最小idle數)
  • #慢SQL日誌
  • spring.datasource.druid.filter.stat.enables=true
  • spring.datasource.druid.filter.stat.slog-slow-sql=true
  • spring.datasource.druid.filter.stat.slow-sql-millis=3000
  •  
  • spring.datasource.druid.test-on-borrow=true
  • spring.datasource.druid.test-on-return=true
  • spring.datasource.druid.test-shile-idle=true

5.Spring的JDBC操作類

包:spring-jdbs

  • core,JdbcTemplate等相關核心接口和類
  • datasource,數據源相關的輔助類
  • object,將基本的JDBC操作封裝成對象
  • sipport,錯誤碼等其它輔助工具

6.Spring的事務抽象

 

@EnableTransactionManagement 【開啓事務管理】

一致的事務模型(JDBC / Hibernate/ myBatis)(DataSource / JTA) 

事務抽象的核心接口PlatformTransactionManager(DataSourceTransactionManager 、 HibernateTransastionManager 、 JtaTransactionManager)===》commit方法、rollback方法

TransationDefinition(Propagation【傳播特性】、Isolation(隔離級別)、Timeout(超時)、Read-only status(只讀狀態))

編程式事務: 

  TransactionTemplate(TransactionCallback、TransactionCallbackWithoutResult)

   PlatformTransactionManager(可以傳入TransactionDefinition進行定義)

聲明式事務(使用AOP代理):

@EnableTransactionManagement(開啓事務註解;proxyTargetClass指定代理類;mode;order事務執行順序)

@Translational(transactionManager;propagation;isolation;timeout;readout;rollbackFor)

Spring的JDBC異常抽象(SQLErrorCodes.java各類數據庫錯誤碼進行對應的處理)

spring會將數據操作的異常轉換爲DataAccessException,無論使用何總數據訪問方式,都能使用一樣的異常

課程解疑

相關注解:

@Configuration(聲明是配置類)

@ImportResource(引用額外的配置文件) 

@ComponentScan(組建掃描)

@Bean(創建bean)

@configurationProperties

@Component、@Repository、@Service、@Controller、@RestController、@RequestMapping

@Autowired(根據類型注入)、@Qualifier(指定注入的bean過濾)、@Resource(根據名稱進行注入)、@Value(獲取配置信息、找到context上下文配置信息)

2.O/R Mapping實踐

1、認識Spring Data JPA

Hibernate

  • 一款開源的對象關係映射(Object / Relational Mapping)框架
  • 將開發者從95%的常見數據持久化工作中解救出來
  • 屏蔽了底層數據庫的各種細節

JPA(java Persistence API):爲對象關係映射提供了一種基於POJO的持久化模型

  • 簡化數據持久化代碼的開發工作
  • 爲java社區屏蔽不同持久化api的差異

Spring Data(在保留底層存儲特性的同時,提供相對一致的、基於Spring的編程模型)【Spring Data Commons ; Spring Data JDBC ; Spring Data JPA ; Spring Data Redis】

2、定義JPA的實體對象

註解

實體:@Entity、@mappedSuperclass【一般屬於父類標記】、@Table(name="")【將實體和對應的表關聯】

主鍵:@Id 、@GeneratedValue(strategy,generator)、@SequenceGenerator(name,sequenceName)

映射:@Column(name , nullable , length , insertable , updatable)、@JoinTable(name)、@JoinColumn(name)

關係:@OneToOne、@OneTomany、@ManyToOne、@ManyToMany、@OrderBy【排序】

Loombok常用註解:

@Getter / @Setter 、 @ToString、@NoArgsConstructor / @RequiredArgsConstryctor / @AllargsConstructor

@Data 、 @Builder【生成一個構造方法,進行構造對象】、@Slf4j / @CommonsLog / @Log4j2

3、線上咖啡館實戰項目:SpringBucks

4、通過Spring Data JPA操作數據庫

@EnableJpaRepositories 【開啓jpaResitories】
interface JpaResitory<T, ID>
interface PagingAndSortingRepository<T, ID>
interface CrudRepository<T, ID>
interface Repository<T, ID>
@NoRepositoryBean  【不需要給該類、接口創建bean】

Repository Bean是如何創建的?

接口中的方法是如何被解釋的?

5、Mybatis(一款優秀的持久層框架;支持定製化SQL、存儲過程和高級映射)

mybatis簡單配置:

mybatis.mapper-locations=classpath*:mapper/**/*.xml

mybatis.type-aliases-package=類型別名的包名

mybatis.typs-handlers-package=TypeHander掃描報名

mybatis.configuration.map-underscore-to-camel-case=true 【下劃線和駝峯命名對應】

@MapperScan 【配置掃描位置】

@Mapper 【定義接口】

@Param 【參數別名】

Mybatis Generator(Mybatis代碼生成器;根據數據庫表生成相關代碼【POJO、Mapper接口、SQL Map XML】)

6、Mybatis PageHelper(支持多種數據;支持多種分頁方式)

7、SpringBucks項目小結

3.NoSql實踐

MongoDB(是一款開源的文檔型數據庫  https://www.mongodb.com)

Spring 對MongoDB的支持==》spring Data MongoDB(MongoTemplate【MongoDB增刪改查】、Repository支持【類似於jpa 的repository】) 

@Document、@Id、@EnableMongoRepositories

對應接口【MongoReposity<T, ID>、PagingAndSortingRepository<T, ID>、CrudRepository<T, ID>】

Redis(是一款開源的內存Key-valus存儲,支持多種數據結構)

Spring對Redis的支持【Spring Data Redis(支持的客戶端Jedis / Lettuce;RedisTemplate ; Repository支持)】

Jedis客戶端注意點:

  1. Jedis不是線程安全(不能在多線程之間使用同一個Jedis客戶端)
  2. 通過JedisPoll獲得Jedis實例
  3. 直接使用Jedis中的方法 

Redis的哨兵模式(是Redis的一種高可用方案==?監控、通知、自動故障轉移、服務發現...)

JedisSentinelPoll(哨兵連接池)

Redis Cluster(Redis的集羣模式==》數據自動分片[分成16384個hash slot];在部分節點失效時有一定可用性)

JedisCluster(Jedis只從Master讀數據,如果想要自動讀寫分離,可以定製)

Spring的緩存抽象爲不同的緩存提供一層抽象

  • 爲java方法增加緩存,緩存執行結果
  • 支持ConcurrentMap、EhCache、Caffeine、JCache、RedisCache
  • 接口(org.springframework.cache.Cache、org.springframework.cache.CacheManager)

@EnableCaching(開啓緩存機制)

@Cacheable(如果有緩存則取,不存在可以取存取)

@CacheEvict(清除緩存)

@CachePut(存放緩存)

@Caching(緩存打包)

@CacheConfig(緩存設置)

Spring與Redis建立連接

LettuceConnectionFactory與JedisConnectionFactory

  • RedisStandaloneConfiguration
  • RedisSentinelConfiguration
  • RedisClusterConfiguuration

Spring中Redis的讀寫分離

  Lettuce內置支持讀寫分離

  •   只讀主,只讀從
  • 優先讀主、優先讀從

    LettuceClientConfiguration

    LettucePollingClientConfiguration

    LettuceClientConfigurationBuilderCustomizer

Reids Repository

實體註解:@RedlisHash(類似於@Entity、@Document)、@Id、@indexed(二級索引)

Spring區分Repository方式:

  • 根據實體類的註解
  • 根據繼承的接口類型
  • 掃描不同的包

4.數據訪問進階

Project Reactor()

*******學習了一半學不下去了,不可否認作者是個技術大牛,但是講課總帶着各種英文專業術語,語速又快,如果有哪些方面沒了解過的,很難聽得懂,講的技術又不是很深,一臉懵逼*******

(三)Web開發

1.spring MVC

2.Web開發進階

3.訪問Web資源

(四)Spring Boot

1.自動配置實現原理及實現

2.起步依賴原理和定製

3.配置文件加載機制

4.獲取運行狀態

5.配置運行容器

6.可執行Jar背後的祕密

(五)Spring Cloud

1.雲原生和爲服務

2.服務註冊、發現、熔斷與配置

3.Spring Cloud Stream

4.服務鏈路追蹤

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章