Spring全家桶

(一)初识Spring

1.spring家族的主要成员

始于框架,但不止于框架,涉及到各行业

Spring Framework(用于构建企业级应用的轻量级一站式解决方案)

设计理念:

  1. 力争让选择无处不在
  2. 体现海纳百川的精神
  3. 保持向后兼容性
  4. 专注APi设计
  5. 追求严苛的代码质量

Spring全家桶_第1张图片

Spring Boot(快速构建基于spring的应用程序)

  1. 快、很快、非常快
  2. 进可开箱即用、退可按需改动
  3. 提供各种非功能特性
  4. 不用生成代码,没有XML配置

Spring Cloud(简化了分布式系统的开发)

  1. 配置管理
  2. 服务注册与发现
  3. 熔断
  4. 服务追踪

2.跟着spring了解技术趋势(spring boot、spring cloud)

3.编写第一个spring应用程序

actuator检测接口是否正常、是否是模板、查看容器创建的beans

Spring全家桶_第2张图片

(二)数据操作

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.多数据源配置

Spring全家桶_第3张图片

Spring全家桶_第4张图片

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(只读状态))

Spring全家桶_第5张图片

Spring全家桶_第6张图片

编程式事务: 

  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

Spring全家桶_第7张图片

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
interface PagingAndSortingRepository
interface CrudRepository
interface Repository
@NoRepositoryBean  【不需要给该类、接口创建bean】

Repository Bean是如何创建的?

Spring全家桶_第8张图片

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

Spring全家桶_第9张图片

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、PagingAndSortingRepository、CrudRepository

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.服务链路追踪

 

你可能感兴趣的:(Spring,Spring)