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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值