目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: Java (110)

运行中的 SpringBoot

认识 Spring Boot 的各类 Actuator Endpoint Actuator  目的:监控并管理应用程序  访问方式 HTTP JMX 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 一些常用的 Endpoint 如何访问 Actuator Endpoint HTTP 访问 /actuator/<Actuator ID> 端口与路径(配置 Actuator 发布的端口 和 应用程序分开,实现应用与管理的隔离,例如:应用发布在 8080 端口,Actuator 相关的所有 Endpoint 发布在 8090 端口,前段 nginx 请求转发给 8080 端口,外部请求不允许直接访问 8090 端口,起到了保护作用。) • management.server.address= •....

Spring Cloud & Cloud Native 概述

简单理解微服务  “微服务就是⼀些协同工作的小而自治的服务。” – Sam Newman 小:相对于单体服务。 自治:相对内聚性更强。 微服务的优点 易购性:语言、存储…… 弹性:一个组件不可用,不会导致级联故障。 扩展:单体服务不易扩展,多个较小的服务可以按需做横向扩展。(细粒度扩容性能瓶颈的服务) 易于部署 与组织结构对齐(每个服务对应独立的团队,职责更加清晰分明) 可组合性(整个业务链路是由多个微服务相互配合完成) 可替代性(升级改造时,可以用一个服务代替另外一个服务) 实施微服务的代价 没有银弹!!! 分布式系统的复杂性(分布式系统之间的事务、最终一致性等……) 开发、测试等诸多研发过程中的复杂性 部署、监控等诸多运维复杂性 如何理解云原生  “云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。” – CNCF Cloud Native Defifinition v1.0 云原生应用要求 DevOps:开发与运维一同致力于交付高品质的软件服务于客户 *持续交付:软件的构建、测试和发布,要更快、更频繁、更稳定 微服务:以⼀....

分布式环境中如何解决Session的问题

常见的会话解决方案 粘性会话 : Sticky Session (任意节点故障引发请求重定向到其他节点的无法获取到原有 Session) 会话复制 : Session Replication (复制成本递增) 集中会话 : Centralized Session Spring Session 简化集群中的用户会话管理 无需绑定容器特定解决方案 支持的存储 Redis MongoDB JDBC Hazelcast 实现原理  通过定制的 HttpServletRequest 返回定制的 HttpSession。 SessionRepositoryRequestWrapper SessionRepositoryFilter DelegatingFilterProxy 基于 Redis 的 HttpSession 基本配置 @EnableRedisHttpSession 提供 RedisConnectionFactory 实现 AbstractHttpSessionApplicationInitializer SpringBoot 对 Spring Session 的支持....

RESTful Web Service

REST  REST 提供了一组架构约束(风格),当作为一个整体来应用时,强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件。 Richardson 成熟度模型  Richardson 服务成熟度模型是基于一个服务对于 URI,HTTP 和超媒体的支持,划分出服务成熟度的三个级别 + 零级(即:没有任何支持)。他以一种服务实现者容易理解的方式,将通用的架构模式映射到服务的设计。 如何实现 RESTFul Web Service 识别资源 选择合适的资源粒度 设计 URI 选择合适的 HTTP 方法和返回码 设计资源的表述 识别资源 找到领域名词:能用 CRUD 操作的名词 将资源组织为集合(即集合资源) 将资源合并为符合资源 计算或处理函数 资源粒度 站在服务端的角度,要考虑 网络效率 表述的多少 客户端的易用程度 站在客户端的角度,要考虑 可缓存性 修改频率 可变性 构建更好的 URI 使用域及子域对资源进行合理的分组或划分 在 URI 的路径部分使用斜杠分隔符 ( / ) 来表示资源之间的层次关系 在 ....

访问 Web 资源:RestTemplate 、WebClient

通过 RestTemplate 访问 Web 资源  Spring Boot 中没有自动配置 RestTemplate;  Spring Boot 提供了 RestTemplateBuilder:RestTemplateBuilder.build() 常用方法 GET 请求: getForObject() / getForEntity() POST 请求: postForObject() / postForEntity() PUT 请求: put() DELETE 请求: delete() 构造 URI 构造 URI: UriComponentsBuilder 构造相对于当前请求的 URI: ServletUriComponentsBuilder 构造指向 Controller 的 URI: MvcUriComponentsBuilder 示例 Coffee package geektime.spring.springbucks.customer.model; import lombok.AllArgsConstructor; import lombok.Builder; im....

Spring MVC

认识 Spring MVC DispatcherServlet (核心、也是所有请求的入口) Controller:业务处理逻辑 xxxResolver:解析器 ViewResolver HandlerExceptionResolver MultipartResolver HandlerMapping:Request 与 Controller 的映射。 Spring MVC 中的常用注解 @Controller @RestController :@Controller + @RequestBody。 @RequestMapping:此 Controller 要处理哪些请求。 @GetMapping @PostMapping @PutMapping @DeleteMapping @RequestBody:请求报文体 @ResponseBody:响应报文体 @ResponseStatus:响应状态码 定义一个简单的 Controller CoffeeController package geektime.spring.springbucks.waiter.control....

AOP 打印数据访问层摘要

APO核心概念 Spring AOP 常用注解 @EnableAspectJAutoProxy:开启AspectJ的支持。 @Aspect:当前类是一个切面。(需要配合@Component) @Pointcut: @Before:Advice在Join Point之前执行。 @After :不管成功或失败,只要结束就会执行。 @AfterReturning :在成功return之后执行。 @AfterThrowing :在失败return之后执行。 @Around:环绕通知。前+后 @Order:用于指定切面的执行顺序。数值越小,优先级越高。 如何打印SQL HikariCP  自身没有输出SQL的能力,需要借助P6Spy。 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.1</version> </dependency> Alibaba Druid  内置 SQL ....