1.新开了一个 SpringBoot 项目开发系列博客,项目开发中遇到的问题与解决方案分享给大家。2000 年左右 Java 行业中都是 EJB 的天下,但是 EJB 本身比较庞大复杂,各企业使用起来并不是很便利,于是2002年 Rod Johnson 发布我们所知的 Spring 框架的基础。接下来 Spring 发展迅速,平均两三年就会发布一个新版本,直到最近 9 月份推出的 Spring 5.0,Spring 也从一个小小的开源软件发展为 Java 界第一个框架
2.Spring 在不断发展的过程中也出现了一些问题,需要的配置文件也越来越多,而且大部分是重复的配置,也经常因为配置文件配置错误产生很多问题。慢慢 Spring 变成了一个大而全的框架,背离它简洁开发的理念。Spring 也意识到了这些问题,急需有这么一套软件可以解决这些问题,这个时候微服务的概念也慢慢兴起,Spring 站在了这么一个高度上开发了一个全新的技术栈:Spring Boot。
3.最近几年流行微服务,SpringCloud是微服务的标准,而SpringBoot是SpringCloud的基础,参考了《Spring Cloud微服务实战》《Spring Cloud与Docker微服务架构实战》在程序员DDD的博客看了很多篇博客,实际开发后才发现它的庞大,研究还行,落地到项目中就有很多需要做的了,微服务涉及到如下图中的基础设施
4..架构设计的主要目的是为了解决软件系统复杂度带来的问题,架构设计因遵循:合适原则,简单原则,演化原则因SpringBoot方便、快速、少配置,决定用它来开发项目,随着业务与需求和复杂度的增加,开发人员的配置,以后能快速升级到SpringCloud微服务体系中
Spring Boot 由 Spring、Spring MVC 演化而来,注解也继承自 两者。下面我们看下 Spring MVC 中常用的注解:
- @Controller:该注解用于类上,其表明该类是 Spring MVC 的 Controller;
- @RequestMapping:该注解主要用来映射 Web 请求,其可以用于类或者方法上;
- @RequestParam:该注解主要用于将请求参数数据映射到功能处理方法的参数上;
- @ResponseBody:该注解的作用是将方法的返回值放在 Response 中,而不是返回一个页面,其可以用于方法上或者方法返回值前;
- @RequestBody:用于读取 HTTP 请求的内容(字符串),通过 Spring MVC 提供的 HttpMessageConverter 接口将读到的内容转换为 JSON、XML 等格式的数据并绑定到 Controller 方法的参数上;
- @PathVariable:用于接收请求路径参数,将其绑定到方法参数上;
- @RestController:该注解是一个组合注解,只能用于类上,其作用与 @Controller、@ResponseBody一起用于类上等价。
5.这个系列会分享些什么内容- 基于 SpringBoot 搭建一个属于你的Web开发框架
- 集成**Hikari**:号称Java平台最快的数据库连接池,有网友对一些[连接池做过对比](),请[自行查看]()
- Thymeleaf:Html模板引擎,替代 JSP
- Mybatis:是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射
- Redis:完全开源,是一个高性能的 **键值** 数据库,丰富的数据类型,**数据可持久化**,服务器宕机后不用人工恢复,往往缓存用户会话和各业务都需读的数据,可缓解数据库压力
- Mongodb:开源,京东商品存储、百度网盘大量使用。是一个基于分布式文件存储的 **文档** 数据库,分片+副本集可组成一个高可用集群,直接海量数据,而且高性能。分片指将数据库拆分,副本集可以理解为数据库的主从,支持读写分,适合存储大量商品数据
- RabbitMQ:开源的消息队列中间件,支持消息的持久化、负载均衡和集群,且集群易扩展,可在集群中配置某些节点数据持久在内存上,某些节点把数据持久在硬盘上,换来高性能,具有一个Web监控界面,易于管理
- 分布式锁:分布式系统中,大量用户抢购某一商品,为防止商品超出库存,保证数据的准确性就需分布式锁了,因为分布式环境是多 **进程** ,项目中基于redis实现-
- 分布式限流:高可用,保障系统能稳定提供服务