07 2021 档案
摘要:(1) 引入依赖 Apollo的客户端jar包已经上传到中央仓库,应用在实际使用时只需要按照如下方式引入即可。 <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifact
阅读全文
摘要:环境要求 Java Apollo服务端:1.8+ Apollo客户端:1.7+ 由于需要同时运行服务端和客户端,所以建议安装Java 1.8+。 MySQL 版本要求:5.6.5+ Apollo的表结构对 timestamp 使用了多个default声明,所以需要5.6.5以上版本 环境搭建 (1)
阅读全文
摘要:Apollo概述 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特
阅读全文
摘要:在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线。 SpringCloud中也有对应的解决方案,SpringCloud Bus 将分布式的节点用轻量的消息代理连接起来,可以很容易搭建消息总线,配
阅读全文
摘要:在之前的代码中,客户端都是直接调用配置中心的server端来获取配置文件信息。这样就存在了一个问题,客户端和服务端的耦合性太高,如果server端要做集群,客户端只能通过原始的方式来路由,server端改变IP地址的时候,客户端也需要修改配置,不符合springcloud服务治理的理念。spring
阅读全文
摘要:准备工作 Confifig Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置文件内容,也可以使用SVN存储,或者是本地文件存储。这里使用git作为学习的环境 使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法
阅读全文
摘要:对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。微服务的配置管理一般有以下需求: 集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。 不同环境不同
阅读全文
摘要:消息分组 通常在生产环境,我们的每个服务都不会以单节点的方式运行在生产环境,当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上。默认情况下,当生产者发出一条消息到绑定通道上,这条消息会产生多个副本被每个消费者实例接收和处理,但是有些业务场景之下,我们希望生产者
阅读全文
摘要:Spring Cloud Stream 内置了两种接口,分别定义了 binding 为 “input” 的输入流,和 “output” 的输出流,而在我们实际使用中,往往是需要定义各种输入输出流。使用方法也很简单。 interface OrderProcessor { String INPUT_OR
阅读全文
摘要:准备工作 案例中通过rabbitMQ作为消息中间件,完成SpringCloud Stream的案例。需要自行安装 消息生产者 /** * 入门案例: * 1.引入依赖 * 2.配置application.yml文件 * 3.发送消息的话,定义一个通道接口,通过接口中内置的messagechannel
阅读全文
摘要:在实际的企业开发中,消息中间件是至关重要的组件之一。消息中间件主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。不同的中间件其实现方式,内部结构是不一样的。如常见的RabbitMQ和Kafka,由于这两个消息中间件的架构上的不同,像RabbitMQ有exchan
阅读全文
摘要:Zipkin Server默认时间追踪数据信息保存到内存,这种方式不适合生产环境。因为一旦Service关闭重启或者服务崩溃,就会导致历史数据消失。Zipkin支持将追踪数据持久化到mysql数据库或者存储到elasticsearch中。这里已mysql为例。 准备数据库 可以从官网找到Zipkin
阅读全文
摘要:在默认情况下,Zipkin客户端和Server之间是使用HTTP请求的方式进行通信(即同步的请求方式),在网络波动,Server端异常等情况下可能存在信息收集不及时的问题。Zipkin支持与rabbitMQ整合完成异步消息传输。 加了MQ之后,通信过程如下图所示: RabbitMQ的安装与启动: w
阅读全文
摘要:通过查看日志分析微服务的调用链路并不是一个很直观的方案,结合zipkin可以很直观地显示微服务之间的调用关系。 (1)客户端添加依赖: 客户端指的是需要被追踪的微服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifac
阅读全文
摘要:(1) Zipkin Server下载 从spring boot 2.0开始,官方就不再支持使用自建Zipkin Server的方式进行服务链路追踪,而是直接提供了编译好的 jar 包来给我们使用。可以从官方网站下载先下载Zipkin的web UI,我们这里下载的是zipkin-server-2.1
阅读全文
摘要:Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。 我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以
阅读全文
摘要:接下来通过之前的项目案例整合Sleuth,完成入门案例的编写 (1) 配置依赖 修改微服务工程引入Sleuth依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-s
阅读全文
摘要:微服务架构下的问题 在大型系统的微服务化构建中,一个系统会被拆分成许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了
阅读全文
摘要:Spring Cloud Gateway 核心处理流程如上图所示,Gateway的客户端向 Spring Cloud Gateway 发送请求,请求首先被 HttpWebHandlerAdapter 进行提取组装成网关上下文,然后网关的上下文会传递到 DispatcherHandler 。 Disp
阅读全文
摘要:高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指通过系统架构设计减少系统不能提供服务的时间。我们都知道单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”或者叫“冗余”,只有一个服务节点,
阅读全文
摘要:常见的限流算法 (1) 计数器 计数器限流算法是最简单的一种限流实现方式。其本质是通过维护一个单位时间内的计数器,每次请求计数器加1,当单位时间内计数器累加到大于设定的阈值,则之后的请求都被拒绝,直到单位时间已经过去,再将计数器重置为零 算法缺陷:当第十秒的时候已经接收了10个请求时,在下次重置之前
阅读全文
摘要:统一鉴权 内置的过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们自己编写过滤器来实现的,那么我们一起通过代码的形式自定义一个过滤器,去完成统一的权限校验。 鉴权逻辑 开发中的鉴权逻辑: 当客户端第一次请求服务时,服务端对用户进行信息认证(登录) 认证通过,将用户信息进
阅读全文
摘要:Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器 过滤器基础 (1) 过滤器的生命周期 Spring Cloud Gateway 的 Filter 的生命周期
阅读全文
摘要:Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet;直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支持长连接)才发布,但 Spring Cloud 暂时还没有整合计划。Spring CloudGateway 比 Zuul 1.x 系
阅读全文
摘要:在Zuul中, 整个请求的过程是这样的,首先将请求给zuulservlet处理,zuulservlet中有一个zuulRunner对象,该对象中初始化了RequestContext:作为存储整个请求的一些数据,并被所有的zuulfifilter共享。zuulRunner中还有 FilterProce
阅读全文
摘要:通过之前的学习,我们得知Zuul它包含了两个核心功能:对请求的路由和过滤。其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础;而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。其实,路由功能在真正运行时,它的路由映射和请求转发同样也由几个
阅读全文
摘要:最直观的理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。在微服务体系中,Zuul负责接收所有的请求。根据不同的URL匹配规则,将不同的请求转发到不同的微服务处理。 zuul: routes: product-service: # 这里是路由id,随意写 path: /product-s
阅读全文
摘要:Zuul简介 ZUUL是Netflflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的 核心是一系列的过滤器,这些过滤器可以完成以下功能: 动态路由:动态将请求路由到不同后端集群 压力测试:逐渐增加指向集群的流量,以了解性能 负载分配:为每一种负
阅读全文
摘要:Nginx介绍 正向/反向代理 (1)正向代理 正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
阅读全文
摘要:在学习完前面的知识后,微服务架构已经初具雏形。但还有一些问题:不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。如下图: 如果让客户端直接与各个微服务通讯,可能会有很多问题: 客户端会请求多个不同的服务,需要维护不同的请求地址
阅读全文
摘要:第一章: 微服务网关概述 01 微服务网关概述 02 基于Nginx的网关实现 第二章: 微服务网关-Zuul 01 搭建Zuul网关服务器 02 Zuul中的路由转发 03 Zuul中的过滤器 04 服务网关Zuul的核心源码解析 第三章: 微服务网关-GateWay 01 GateWay入门案例
阅读全文
摘要:Sentinel 适配了 Feign 组件。如果想使用,除了引入 sentinel-starter 的依赖外还需要 2 个步骤: 配置文件打开 sentinel 对 feign 的支持: feign.sentinel.enabled=true 加入 openfeign starter 依赖使 sen
阅读全文
摘要:Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,在构造RestTemplate bean的时候需要加上 @SentinelRestTemplate 注解。 @Bean @LoadBalanced @Sentin
阅读全文
摘要:通用资源保护 (1) 案例准备 复制工程 shop_service_order 并命名为 shop_service_order_rest_sentinel (2)引入依赖 需要注意SpringCloud-Alibaba与SpringCloud的版本关系 推荐使用的依赖关系版本 父工程引入alibab
阅读全文
摘要:下载并启动控制台: (1)获取 Sentinel 控制台 您可以从官方网站中下载最新版本的控制台 jar 包,下载地址如下: https://github.com/alibaba/Sentinel/releases/download/1.6.3/sentinel-dashboard-1.6.3.ja
阅读全文
摘要:服务熔断Hystrix的替换方案 18年底Netflflix官方宣布Hystrix 已经足够稳定,不再积极开发 Hystrix,该项目将处于维护模式。就目前来看Hystrix是比较稳定的,并且Hystrix只是停止开发新的版本,并不是完全停止维护,Bug什么的依然会维护的。因此短期内,Hystrix
阅读全文
摘要:Hystrix 底层基于 RxJava,RxJava 是响应式编程开发库,因此Hystrix的整个实现策略简单说即:把一个HystrixCommand封装成一个Observable(待观察者),针对自身要实现的核心功能,对Observable进行各种装饰,并在订阅各步装饰的Observable,以便
阅读全文
摘要:微服务使用Hystrix熔断器实现了服务的自动降级,让微服务具备自我保护的能力,提升了系统的稳定性,也较好的解决雪崩效应。其使用方式目前支持两种策略: 线程池隔离策略:使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服
阅读全文
摘要:熔断器有三个状态 CLOSED 、 OPEN 、 HALF_OPEN 熔断器默认关闭状态,当触发熔断后状态变更为OPEN ,在等待到指定的时间,Hystrix会放请求检测服务是否开启,这期间熔断器会变为 HALF_OPEN 半开启状态,熔断探测服务可用则继续变更为 CLOSED 关闭熔断器。 Clo
阅读全文
摘要:我们知道,当请求失败,被拒绝,超时的时候,都会进入到降级方法中。但进入降级方法并不意味着断路器已经被打开。那么如何才能了解断路器中的状态呢? Hystrix的监控平台 除了实现容错功能,Hystrix还提供了近乎实时的监控,HystrixCommand和HystrixObservableComman
阅读全文
摘要:SpringCloud Fegin默认已为Feign整合了hystrix,所以添加Feign依赖后就不用在添加hystrix,那么怎么才能让Feign的熔断机制生效呢,只要按以下步骤开发: (1)复制 shop_service_order 项目并命名为 shop_service_order_feig
阅读全文
摘要:(1)复制 shop_service_order 项目并命名为 shop_service_order_rest_hystrix 略 (2)配置依赖 在 shop_service_order_rest_hystrix 工程中添加Hystrix的相关依赖 <dependency> <groupId>or
阅读全文
摘要:雪崩效应 在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪
阅读全文
摘要:问题分析 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务累计,导致服务瘫痪。 在SpringBoot程序中,默认使用内置to
阅读全文
摘要:通过注册中心已经实现了微服务的服务注册和服务发现,并且通过Ribbon实现了负载均衡,已经借助Feign可以优雅的进行微服务调用。那么我们编写的微服务的性能怎么样呢,是否存在问题呢? 性能工具Jmetter Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压
阅读全文
摘要:组件的使用方式 注册中心 (1)Eureka 搭建注册中心 引入依赖 spring-cloud-starter-netflix-eureka-server 配置EurekaServer 通过 @EnableEurekaServer 激活Eureka Server端配置 服务注册 服务提供者引入 sp
阅读全文
摘要:通过上面的使用过程,@EnableFeignClients和@FeignClient两个注解就实现了Feign的功能,那我们从 @EnableFeignClients注解开始分析Feign的源码 (1)EnableFeignClients注解 @Retention(RetentionPolicy.R
阅读全文
摘要:在开发或者运行阶段往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。 要想用属性配置方式来达到日志效果,只需在 application.yml 中添加如下内容即可: feign: client: config: shop-service-product: logger
阅读全文
摘要:Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数,即可开启请求与响应的压缩功能: feign: compression: request: enabled: true # 开启请求压缩 response: enabled: true
阅读全文
摘要:从Spring Cloud Edgware开始,Feign支持使用属性自定义Feign。对于一个指定名称的Feign Client(例如该Feign Client的名称为 feignName ),Feign支持如下配置项: feign: client: config: feignName: ##定义
阅读全文
摘要:Feign简介 Feign是Netflflix开发的声明式,模板化的HTTP客户端,其灵感来自Retrofifit,JAXRS-2.0以及WebSocket. Feign可帮助我们更加便捷,优雅的调用HTTP API。 在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添
阅读全文
摘要:Ribbon中的关键组件 ServerList:可以响应客户端的特定服务的服务器列表。 ServerListFilter:可以动态获得的具有所需特征的候选服务器列表的过滤器。 ServerListUpdater:用于执行动态服务器列表更新。 Rule:负载均衡策略,用于确定从服务器列表返回哪个服务器
阅读全文
摘要:什么是负载均衡 在搭建网站时,如果单节点的 web服务性能和可靠性都无法达到要求;或者是在使用外网服务时,经常担心被人攻破,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。 负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将
阅读全文
摘要:不论是基于Eureka的注册中心还是基于Consul的注册中心,SpringCloudRibbon统一进行了封装,所以对于服务调用,两者的方式是一样的。 坐标依赖 在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这里不需要导入任何额外的坐标 工程改造 (1) 服务提
阅读全文
摘要:经过以上的学习,已经实现了服务的注册和服务发现。当启动某个服务的时候,可以通过HTTP的形式将信息注册到注册中心,并且可以通过SpringCloud提供的工具获取注册中心的服务列表。但是服务之间的调用还存在很多的问题,如何更加方便的调用微服务,多个微服务的提供者如何选择,如何负载均衡等。 Ribbo
阅读全文
摘要:consul高可用集群架构图: 此图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或C
阅读全文
摘要:案例准备 (1)复制一份新的工程进行配置 拷贝一份新的工程,起名为 shop_consul_parent ,并导入相关的子模块 (2)修改微服务的相关pom文件 修改每个微服务的pom文件,添加SpringCloud提供的基于Consul的依赖 <!--SpringCloud提供的基于Consul的
阅读全文
摘要:Consul 支持健康检查,并提供了 HTTP 和 DNS 调用的API接口完成服务注册,服务发现,以及K/V存储 这些功能。接下来通过发送HTTP请求的形式来了解一下Consul 服务注册与发现 (1)注册服务 通过postman发送put请求到http://192.168.74.101:8500
阅读全文
摘要:在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使用作为 2.x 分支上现有工作 repo 一部分发布的代码库和工件,则将自负风险。 Eureka的替换方案 Zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的
阅读全文
摘要:SpringBoot中的自动装载 (1)ImportSelector ImportSelector接口是Spring导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)中起到了决定性的作用。当在@Confifiguration标注的Class上使用@Impo
阅读全文
摘要:服务注册慢 默认情况下,服务注册到Eureka Server的过程较慢。SpringCloud官方文档中给出了详细的原因 大致含义:服务的注册涉及到心跳,默认心跳间隔为30s。在实例、服务器、客户端都在本地缓存中具有相同的元数据之前,服务不可用于客户端发现(所以可能需要3次心跳)。可以通过配置eur
阅读全文
摘要:在上一个章节,实现了单节点的Eureka Server的服务注册与服务发现功能。Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间
阅读全文
摘要:Eureka中的自我保护 微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。通知 EurekaServer 该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于8
阅读全文
摘要:商品服务注册 (1) 商品模块中引入坐标 在 shop_service_product 的pom文件中添加eureka client的相关坐标 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <arti
阅读全文
摘要:搭建Eureka服务中心 (1) 创建shop_eureka_server子模块 在 shop_parent 下创建子模块 shop_eureka_server (2) 引入maven坐标 <dependency> <groupId>org.springframework.cloud</groupI
阅读全文
摘要:Eureka的基础知识 Eureka是Netflflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflflix中, 实现SpringCloud的服务发现功能。 上图简要描述了Eureka的基本架构,由3个角色组成: 1、Eureka Server
阅读全文
摘要:注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。 注册中心的主要作用 服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心
阅读全文
摘要:实体类: 在shop_service_common中创建 com.yyj.entity.Product实体类,并配置 package com.yyj.entity; import lombok.Data; import javax.persistence.Entity; import javax.p
阅读全文
摘要:使用微服务架构的分布式系统,微服务之间通过网络通信。我们通过服务提供者与服务消费者来描述微服务间的调用关系。 服务提供者:服务的被调用方,提供调用接口的一方 服务消费者:服务的调用方,依赖于其他服务的一方 我们以电商系统中常见的用户下单为例,用户向订单微服务发起一个购买的请求。在进行保存订单之前需要
阅读全文
摘要:SpringCloud中的核心组件 Spring Cloud的本质是在 Spring Boot 的基础上,增加了一堆微服务相关的规范,并对应用上下文(Application Context)进行了功能增强。既然 Spring Cloud 是规范,那么就需要去实现,目前Spring Cloud 规范已
阅读全文
摘要:服务注册与发现 服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP和提供服务的Port,以及暴露服务自身状态以及访问协议等信息。 服务发现:服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务
阅读全文
摘要:SpringCloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud
阅读全文
摘要:分布式中的远程调用 在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的
阅读全文
摘要:系统架构的演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单体应用架构 Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,dao层代码)是将所有的功能
阅读全文
摘要:第一章: 微服务基础知识 01 系统的架构演变 02 分布式核心知识 03 常见微服务框架 第二章: Spring Cloud概述 01 微服务相关概念 02 Spring Cloud架构体系 第三章: 基础案例搭建 01 基础环境准备 02 微服务的实现 第四章: 服务注册Eureka基础 01
阅读全文
摘要:需求分析 创建商品微服务,实现对品牌表的增删改查功能。具体包括 (1)查询全部列表数据 (2)根据ID查询实体数据 (3)增加 (4)修改 (5)删除 (6)条件查询 (7)分页查询 (8)分页+条件查询 表结构分析 字段名称字段含义字段类型字段长度备注 id 品牌id INT name 品牌名称
阅读全文
摘要:环境准备 将资源中的虚拟机进行安装(相关的docker容器安装已经安装完毕,注意号段改为211) 虚拟机数据: 虚拟机IP:192.168.211.132 虚拟机账号:root 密码:123456 数据库端口:3306 数据库账号:root 密码:123456 swagger-ui和swagger-
阅读全文
摘要:需求分析 网站前台静态原型演示,打开资料\静态原型\前台,首页index.html 网站管理后台静态原型演示 打开资料\静态原型\后台,首页index.html 系统设计 前后端分离 网站后台的部分采用前后端分离方式。 以前的JavaWeb项目大多数都是java程序员又当爹又当妈,又搞前端,又搞后端
阅读全文
摘要:电商行业分析 近年来,世界经济正向数字化转型,大力发展数字经济成为全球共识。党的十九大报告明确提出要建设“数字中国”“网络强国”,我国数字经济发展进入新阶段,市场规模位居全球第二,数字经济与实体经济深度融合,有力促进了供给侧结构性改革。电子商务是数字经济的重要组成部分,是数字经济最活跃、最集中的表现
阅读全文
摘要:01-框架搭建 01_走进电商 02_需求分析与系统设计 03_框架搭建 04_品牌增删改查 02-分布式文件存储解决方案-fastDFS 01_跨域解决方案CORS 02_规格参数与分类管理 03_FastDFS 03-微服务网关鉴权&限流解决方案-JWT&nginx 01_微服务网关Gatewa
阅读全文
摘要:bulk批量操作-脚本 脚本: 测试用的5号文档 POST /person1/_doc/5 { "name":"张三5号", "age":18, "address":"北京海淀区" } 批量操作文本 #批量操作 #1.删除5号 #新增8号 #更新2号 name为2号 POST _bulk {"del
阅读全文
摘要:集群介绍 集群和分布式: 集群:多个人做一样的事。 分布式:多个人做不一样的事 集群解决的问题: 让系统高可用 分担请求压力 分布式解决的问题: 分担存储和计算的压力,提速 解耦 集群和分布式架构往往是并存的 ES集群相关概念 es 集群: ElasticSearch 天然支持分布式 Elastic
阅读全文
摘要:ElasticSearch查询 matchAll-脚本 # 默认情况下,es一次展示10条数据,通过from和size来控制分页 # 查询结果详解 GET goods/_search { "query": { "match_all": {} }, "from": 0, "size": 100 } G
阅读全文
摘要:SpringBoot整合ES ①搭建SpringBoot工程 ②引入ElasticSearch相关坐标 <!--引入es的坐标--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-
阅读全文
摘要:分词器-介绍 •IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包 •是一个基于Maven构建的项目 •具有60万字/秒的高速处理能力 •支持用户词典扩展定义 •下载地址:https://github.com/medcl/elasticsearch-analysis-ik
阅读全文
摘要:RESTful风格介绍 1.ST(Representational State Transfer),表述性状态转移,是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。就是一种定义接口的规范。 2.基于HTTP。 3.使用XML格式定义或JSON格式定义。 4.每一个
阅读全文
摘要:1、上传ElasticSearch安装包 alt+p # 打开sftp窗口 # 上传es安装包 put e:/software/elasticsearch-7.4.0-linux-x86_64.tar.gz 2、执行解压操作 ,如下图 # 将elasticsearch-7.4.0-linux-x86
阅读全文
摘要:基于数据库查询的问题 倒排索引 倒排索引:将文档进行分词,形成词条和id的对应关系即为反向索引。 以唐诗为例,所处包含“前”的诗句 正向索引:由《静夜思》-->窗前明月光 >“前”字 反向索引:“前”字-->窗前明月光-->《静夜思》 反向索引的实现就是对诗句进行分词,分成单个的词,由词推据,即为反
阅读全文
摘要:第一章: 基础部分 01 初识ElasticSearch 02 安装ElasticSearch 03 ElasticSearch脚本操作ES 04 ElasticSearch分词器 05 ElasticSearch JavaApi 第二章: 高级部分 01 ElasticSearch高级操作 02
阅读全文
摘要:Spring 整合RabbitMQ 搭建生产者工程 创建工程 添加依赖 修改pom.xml文件内容为如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:
阅读全文
摘要:Work queues工作队列模式 模式说明 Work Queues与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。 应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。 代码 Work Queues与入门程序的简单模式的代码是几乎一样的;
阅读全文
摘要:搭建示例工程 创建工程 添加依赖 往heima-rabbitmq的pom.xml文件中添加如下依赖: <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0</v
阅读全文
摘要:RabbitMQ安装 安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel t
阅读全文
摘要:消息中间件概述 什么是消息中间件 MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。 为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。 开发中消息队列通常有
阅读全文
摘要:JDBC相关 JDBC快速入门 Mybatis框架基础 01 快速入门 02 相关API 03 映射配置文件 04 核心配置文件 05 传统方式实现Dao层 Mybatis框架进阶 06 接口代理方式实现Dao层 07 动态sql 08 分页插件 09 多表操作 Mybatis框架高级 10 注解单
阅读全文
摘要:系统介绍 我们之前在做学生管理系统时,使用的是原始JDBC操作数据库的,操作非常麻烦,现在我们使用MyBatis操作数据库,简化Dao的开发。 环境搭建(略) 代码改造 步骤一:新增MyBatis配置文件 MyBatisConfig.xml <?xml version="1.0" encoding=
阅读全文
摘要:SQL 构建对象介绍 我们之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。 MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句 查询功能的实现 定义功能类并提供获取查询的 SQL 语
阅读全文
摘要:MyBatis的注解实现复杂映射开发 实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置 一对一查询 一对一查询的模型 一对一查询的需求:查询一个用户信
阅读全文
摘要:MyBatis的常用注解 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper 映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。 @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现
阅读全文
摘要:多表模型介绍 我们之前学习的都是基于单表操作的,而实际开发中,随着业务难度的加深,肯定需要多表操作的。 多表模型分类 一对一:在任意一方建立外键,关联对方的主键。 一对多:在多的一方建立外键,关联一的一方的主键。 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键。 多表模型一对一操作 一
阅读全文
摘要:分页插件介绍 分页可以将很多条结果进行分页显示。 如果当前在第一页,则没有上一页。如果当前在最后一页,则没有下一页。 需要明确当前是第几页,这一页中显示多少条结果。 MyBatis分页插件总结 在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的
阅读全文
摘要:动态sql语句概述 Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了。 参考的官方文档,描述如下: 动态 SQL 之<if> 我们根据实体类的不同取值,使用不同的 SQL语句来进行
阅读全文
摘要:代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
阅读全文
摘要:Dao 层传统实现方式 分层思想:控制层(controller)、业务层(service)、持久层(dao)。 调用流程 LOG4J的配置和使用 在日常开发过程中,排查问题时难免需要输出 MyBatis 真正执行的 SQL 语句、参数、结果等信息,我们就可以借助 LOG4J 的功能来实现执行信息的输
阅读全文
摘要:核心配置文件介绍 核心配置文件包含了 MyBatis 最核心的设置和属性信息。如数据库的连接、事务、连接池信息等。 如下: <?xml version="1.0" encoding="UTF-8" ?> <!--MyBatis的DTD约束--> <!DOCTYPE configuration PUB
阅读全文
摘要:映射配置文件介绍 映射配置文件包含了数据和对象之间的映射关系以及要执行的 SQL 语句 查询功能 <select>:查询功能标签。 属性 id:唯一标识, 配合名称空间使用。 parameterType:指定参数映射的对象类型。 resultType:指定结果映射的对象类型。 SQL 获取参数: #
阅读全文
摘要:Resources org.apache.ibatis.io.Resources:加载资源的工具类。 核心方法 构建器SqlSessionFactoryBuilder org.apache.ibatis.session.SqlSessionFactoryBuilder:获取 SqlSessionFa
阅读全文
摘要:框架介绍 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求! 如图: ORM介绍 ORM(Object Relational Mapping): 对象关系映射 指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。 如图: 具
阅读全文
摘要:本小节我们将在项目中实现运营数据的PDF报表导出功能。 设计PDF模板文件 使用Jaspersoft Studio设计运营数据PDF报表模板文件health_business3.jrxml,设计后的效果如下: 在资源中已经提供好了此文件,直接使用即可。 搭建环境 第一步:在health_common
阅读全文
摘要:Jaspersoft Studio是一个图形化的报表设计工具,可以非常方便的设计出PDF报表模板文件(其实就是一个xml文件),再结合JasperReports使用,就可以渲染出PDF文件。 下载地址:https://community.jaspersoft.com/community-downlo
阅读全文
摘要:JasperReports快速体验 本小节我们先通过一个快速体验来感受一下JasperReports的开发过程。 第一步:创建maven工程,导入JasperReports的maven坐标 <dependency> <groupId>net.sf.jasperreports</groupId> <a
阅读全文
摘要:背景介绍 在前面的课程中我们完成了将运营数据导出到Excel文件的功能。在企业开发中,除了常见的Excel形式报表,还有PDF形式的报表。那么如何导出PDF形式的报表呢? 常见的PDF报表生成方式 iText iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个
阅读全文
摘要:需求分析 运营数据统计报表导出就是将统计数据写入到Excel并提供给客户端浏览器进行下载,以便体检机构管理人员对运营数据的查看和存档。 提供模板文件 本章节我们需要将运营统计数据通过POI写入到Excel文件,对应的Excel效果如下: 通过上面的Excel效果可以看到,表格比较复杂,涉及到合并单元
阅读全文
摘要:需求分析 通过运营数据统计可以展示出体检机构的运营情况,包括会员数据、预约到诊数据、热门套餐等信息。本章节就是要通过一个表格的形式来展示这些运营数据。效果如下图: 完善页面 运营数据统计对应的页面为/pages/report_business.html。 定义模型数据 定义数据模型,通过VUE的数据
阅读全文
摘要:需求分析 会员可以通过移动端自助进行体检预约,在预约时需要选择预约的体检套餐。本章节我们需要通过饼形图直观的展示出会员预约的各个套餐占比情况。展示效果如下图: 完善页面 套餐预约占比饼形图对应的页面为/pages/report_setmeal.html。 导入ECharts库 <script src
阅读全文
摘要:需求分析 会员信息是体检机构的核心数据,其会员数量和增长数量可以反映出机构的部分运营情况。通过折线图可以直观的反映出会员数量的增长趋势。本章节我们需要展示过去一年时间内每个月的会员总数据量。展示效果如下图: 完善页面 会员数量折线图对应的页面为/pages/report_member.html。 导
阅读全文
摘要:ECharts简介 ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖
阅读全文
摘要:在项目中应用Spring Security 前面我们已经学习了Spring Security框架的使用方法,本章节我们就需要将Spring Security框架应用到后台系统中进行权限控制,其本质就是认证和授权。 要进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑,因为用户信息、权限信息、
阅读全文
摘要:认证和授权概念 前面我们已经完成了传智健康后台管理系统的部分功能,例如检查项管理、检查组管理、套餐管理、预约设置等。接下来我们需要思考2个问题: 问题1:在生产环境下我们如果不登录后台系统就可以完成这些功能操作吗? 答案显然是否定的,要操作这些功能必须首先登录到系统才可以。 问题2:是不是所有用户,
阅读全文
摘要:需求分析 手机快速登录功能,就是通过短信验证码的方式进行登录。这种方式相对于用户名密码登录方式,用户不需要记忆自己的密码,只需要通过输入手机号并获取验证码就可以完成登录,是目前比较流行的登录方式。 手机快速登录 页面调整 登录页面为/pages/login.html 发送验证码 为获取验证码按钮绑定
阅读全文
摘要:前面已经完成了体检预约,预约成功后页面会跳转到成功提示页面(orderSuccess.html)并展示预约的相关信息(体检人、体检套餐、体检时间等)。 页面调整 提供orderSuccess.html页面,展示预约成功后相关信息 <div class="info-title"> <span clas
阅读全文
摘要:体检预约流程 用户可以通过如下操作流程进行体检预约: 1、在移动端首页点击体检预约,页面跳转到套餐列表页面 2、在套餐列表页面点击要预约的套餐,页面跳转到套餐详情页面 3、在套餐详情页面点击立即预约,页面跳转到预约页面 4、在预约页面录入体检人信息,包括手机号,点击发送验证码 5、在预约页面录入收到
阅读全文
摘要:前面我们已经学习了Freemarker的基本使用方法,下面我们就可以将Freemarker应用到项目中,帮我们生成移动端套餐列表静态页面和套餐详情静态页面。接下来我们需要思考几个问题: (1)什么时候生成静态页面比较合适呢? (2)将静态页面生成到什么位置呢? (3)应该生成几个静态页面呢? 对于第
阅读全文
摘要:assign指令 assign指令用于在页面上定义一个变量 (1)定义简单类型 <#assign linkman="周先生"> 联系人:${linkman} (2)定义对象类型 <#assign info={"mobile":"13812345678",'address':'北京市昌平区'} > 电
阅读全文
摘要:页面静态化介绍 本章课程中我们已经实现了移动端套餐列表页面和套餐详情页面的动态展示。但是我们需要思考一个问题,就是对于这两个页面来说,每次用户访问这两个页面都需要查询数据库获取动态数据进行展示,而且这两个页面的访问量是比较大的,这就对数据库造成了很大的访问压力,并且数据库中的数据变化频率并不高。那我
阅读全文
摘要:短信服务介绍 目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是这些短信服务都是收费的服务。 本项目短信发送我们选择的是阿里云提供的短信服务。 短信服务(Short Mess
阅读全文
摘要:前面我们已经完成了体检套餐列表页面动态展示,点击其中任意一个套餐则跳转到对应的套餐详情页面(/pages/setmeal_detail.html),并且会携带此套餐的id作为参数提交。 请求路径格式:http://localhost/pages/setmeal_detail.html?id=10 在
阅读全文
摘要:移动端首页为/pages/index.html,效果如下: 点击体检预约直接跳转到体检套餐列表页面(/pages/setmeal.html) 完善页面 展示套餐信息 <ul class="list"> <li class="list-item" v-for="setmeal in setmealLi
阅读全文
摘要:需求分析 用户在体检之前需要进行预约,可以通过电话方式进行预约,此时会由体检中心客服人员通过后台系统录入预约信息。用户也可以通过手机端自助预约。本章节开发的功能为用户通过手机自助预约。 预约流程如下: 1、访问移动端首页 2、点击体检预约进入体检套餐列表页面 3、在体检套餐列表页面点击具体套餐进入套
阅读全文
摘要:移动端开发方式 随着移动互联网的兴起和手机的普及,目前移动端应用变得愈发重要,成为了各个商家的必争之地。例如,我们可以使用手机购物、支付、打车、玩游戏、订酒店、购票等,以前只能通过PC端完成的事情,现在通过手机都能够实现,而且更加方便,而这些都需要移动端开发进行支持,那如何进行移动端开发呢? 移动端
阅读全文
摘要:本章节要完成的功能为通过点击日历中的设置按钮来设置对应日期的可预约人数。效果如下: 完善页面 为设置按钮绑定事件 为日历中的设置按钮绑定单击事件,当前日期作为参数 <button v-if="dayobject.day > today" @click="handleOrderSet(dayobjec
阅读全文
摘要:前面已经完成了预约设置功能,现在就需要通过日历的方式展示出来每天设置的预约人数。 在页面中已经完成了日历的动态展示,我们只需要查询当前月份的预约设置信息并展示到日历中即可,同时在日历中还需要展示已经预约的人数,效果如下: 完善页面 使用静态数据调试 为了能够快速看到效果,我们可以先使用静态数据模拟,
阅读全文
摘要:预约设置信息对应的数据表为t_ordersetting,预约设置操作对应的页面为ordersetting.html t_ordersetting表结构: orderDate:预约日期 number:可预约人数 reservations:已预约人数 批量导入预约设置信息操作过程: 1、点击模板下载按钮
阅读全文
摘要:POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 jxl:专门操作Excel maven坐标: <dependen
阅读全文
摘要:Quartz介绍 Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上
阅读全文
摘要:完善页面 定义分页相关模型数据 pagination: {//分页相关模型数据 currentPage: 1,//当前页码 pageSize:10,//每页显示的记录数 total:0,//总记录数 queryString:null//查询条件 }, dataList: [],//当前页要展示的分页
阅读全文
摘要:需求分析 套餐其实就是检查组的集合,例如有一个套餐为“入职体检套餐”,这个体检套餐可以包括多个检查组:一般检查、血常规、尿常规、肝功三项等。所以在添加套餐时需要选择这个套餐包括的检查组。 套餐对应的实体类为Setmeal,对应的数据表为t_setmeal。套餐和检查组为多对多关系,所以需要中间表t_
阅读全文
摘要:介绍 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的服务器 分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。 常见的图片存储方案: 方案一:使用nginx搭建图片服务器 方案
阅读全文
摘要:完善页面 用户点击编辑按钮时,需要弹出编辑窗口并且将当前记录的数据进行回显,用户修改完成后点击确定按钮将修改后的数据提交到后台进行数据库操作。此处进行数据回显的时候,除了需要检查组基本信息的回显之外,还需要回显当前检查组包含的检查项(以复选框勾选的形式回显)。 绑定单击事件 需要为编辑按钮绑定单击事
阅读全文
摘要:完善页面 定义分页相关模型数据 pagination: {//分页相关模型数据 currentPage: 1,//当前页码 pageSize:10,//每页显示的记录数 total:0,//总记录数 queryString:null//查询条件 }, dataList: [],//当前页要展示的分页
阅读全文
摘要:需求分析 检查组其实就是多个检查项的集合,例如有一个检查组为“一般检查”,这个检查组可以包括多个检查项:身高、体重、收缩压、舒张压等。所以在添加检查组时需要选择这个检查组包括的检查项。 检查组对应的实体类为CheckGroup,对应的数据表为t_checkgroup。检查组和检查项为多对多关系,所以
阅读全文
摘要:完善页面 用户点击编辑按钮时,需要弹出编辑窗口并且将当前记录的数据进行回显,用户修改完成后点击确定按钮将修改后的数据提交到后台进行数据库操作。 绑定单击事件 需要为编辑按钮绑定单击事件,并且将当前行数据作为参数传递给处理函数 <el-button type="primary" size="mini"
阅读全文
摘要:完善页面 为了防止用户误操作,点击删除按钮时需要弹出确认删除的提示,用户点击取消则不做任何操作,用户点击确定按钮再提交删除请求。 绑定单击事件 需要为删除按钮绑定单击事件,并且将当前行数据作为参数传递给处理函数 <el-button size="mini" type="danger" @click=
阅读全文
摘要:本项目所有分页功能都是基于ajax的异步请求来完成的,请求参数和后台响应数据格式都使用json数据格式。 请求参数包括页码、每页显示记录数、查询条件。 请求参数的json格式为:{currentPage:1,pageSize:10,queryString:''itcast''} 后台响应数据包括总记
阅读全文
摘要:完善页面 检查项管理页面对应的是checkitem.html页面,根据产品设计的原型已经完成了页面基本结构的编写,现在需要完善页面动态效果。 弹出新增窗口 页面中已经提供了新增窗口,只是处于隐藏状态。只需要将控制展示状态的属性dialogFormVisible改为true就可以显示出新增窗口。 新建
阅读全文
摘要:导入预约管理模块数据表 操作步骤: (1)根据资料中提供的itcasthealth.pdm文件导出SQL脚本 (2)创建本项目使用的数据库itcast_health (3)将PowerDesigner导出的SQL脚本导入itcast_health数据库进行建表 导入预约管理模块实体类 将资料中提供的
阅读全文
摘要:ElementUI介绍 ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。 官网地址:http://element-cn.eleme.io/#/zh-CN 传智健康项目后台系统就是使用ElementUI来构建页面,
阅读全文
摘要:Power Designer介绍 PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型、面向对象模型。 在项目设计阶段通常会使用PowerDesig
阅读全文
摘要:项目结构 本项目采用maven分模块开发方式,即对整个项目拆分为几个maven工程,每个maven工程存放特定的一类代码,具体如下: 各模块职责定位: health_parent:父工程,打包方式为pom,统一锁定依赖的版本,同时聚合其他子模块便于统一执行maven命令 health_common:
阅读全文
摘要:项目介绍 传智健康管理系统是一款应用于健康管理机构的业务系统,实现健康管理机构工作内容可视化、会员管理专业化、健康评估数字化、健康干预流程化、知识库集成化,从而提高健康管理师的工作效率,加强与会员间的互动,增强管理者对健康管理机构运营情况的了解。 原型展示 参见资料中的静态原型。 技术架构 功能架构
阅读全文
摘要:01.项目概述和环境搭建 01 项目概述 02 环境搭建 03 PowerDesigner 04 ElementUI 02.预约管理-检查项管理 01 基础环境搭建 02 新增检查项 03 检查项分页 04 删除检查项 05 编辑检查项 03.预约管理-检查组管理 01 新增检查组 02 检查组分页
阅读全文
摘要:第一章: 基础部分 01 MQ的基本概念 02 RabbitMQ安装 03 RabbitMQ快速入门 04 RabbitMQ的工作模式 05 框架整合RabbitMQ 第二章: 高级部分 01 RabbitMQ消息的可靠性 02 RabbitMQ高级特性 03 RabbitMQ应用问题 04 Rab
阅读全文
摘要:分模块合作开发 Nexus Nexus是Sonatype公司的一款maven私服产品 下载地址:https://help.sonatype.com/repomanager3/download Nexus安装、启动与配置 启动服务器(命令行启动) nexus.exe /run nexus 访问服务器(
阅读全文
摘要:聚合 多模块构建维护 聚合 作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。 制作方式: 创建一个空模块,打包类型定义为pom <packaging>pom</packaging> 定义当前模块进行构建操作时关联的其他模块名称 <modules> <module>../ssm_con
阅读全文
摘要:工程模块与模块划分 ssm_pojo拆分 新建模块 拷贝原始项目中对应的相关内容到ssm_pojo模块中 实体类(User) 配置文件(无) ssm_dao拆分 新建模块 拷贝原始项目中对应的相关内容到ssm_dao模块中 数据层接口(UserDao) 配置文件:保留与数据层相关配置文件(3个) 注
阅读全文
摘要:第一章: 基础部分 01 Maven入门 第二章: 高级部分 01 Maven-分模块开发与设计 02 Maven-高级特性 03 Maven-私服
阅读全文
摘要:SpringBoot 项目开发完毕后,支持两种方式部署到服务器: ①jar包(官方推荐) ②war包 更改pom文件中的打包方式为war <packaging>war</packaging> 修改启动类: 继承SpringBootServletInitializer类并重写configure方法:
阅读全文
摘要:actuator基本使用: ①导入依赖坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ②访问
阅读全文
摘要:自动配置-Condition-1 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean @Conditional要配和Condition的实现类(ClassCondition)进行使用 ClassCondition publi
阅读全文
摘要:SpringBoot整合Junit 搭建SpringBoot工程 引入starter-test起步依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st
阅读全文
摘要:配置文件分类 SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。 默认配置文件名称:application 在同一级目
阅读全文
摘要:在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包
阅读全文
摘要:02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率 SpringBoot功能 1) 自动配置 Spring Boot的自动
阅读全文
摘要:第一章: 基础部分 01 SpringBoot快速入门 02 SpringBoot起步依赖分析 03 SpringBoot配置 04 SpringBoot整合其他框架 第二章: 高级部分 01 SpringBoot自动配置-@Conditional注解和Condition接口 02 SpringBo
阅读全文
摘要:互联网项目架构-特点 /* 1. 用户多 2. 流量大,并发高 3. 海量数据 4. 易受攻击 5. 功能繁琐 6. 变更快 */ 互联网项目架构-目标 /* 衡量网站的性能指标: 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。 并发数:指系统同时能处理的请求数量。 并发连接数:
阅读全文
摘要:zookeeper概念 /* 背景介绍: Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务。 Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、 Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk Zookeeper 是一个
阅读全文
摘要:数据库连接池的概念 /* - 数据库连接背景 - 数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 - 数据库连接池 - 数据库连接池负
阅读全文
摘要:JDBC快速入门 /* jdbc的概念: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API, 可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。 jdbc的本质: 其实就是java官方提供的
阅读全文
摘要:Maven可以解决的问题: /* (1)jar包不统一,jar不兼容 (2)工程升级维护过程操作繁琐 */ Maven是什么: /* Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM) Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,
阅读全文
摘要:校验框架入门 表单校验分类 /* 校验位置: 客户端校验 服务端校验 校验内容与对应方式: 格式校验 客户端:使用Js技术,利用正则表达式校验 服务端:使用校验框架 逻辑校验 客户端:使用ajax发送要校验的数据,在服务端完成逻辑校验,返回校验结果 服务端:接收到完整的请求后,在执行业务操作前,完成
阅读全文
摘要:异步调用 发送异步请求(回顾) <a href="javascript:void(0);" id="testAjax">访问controller</a> <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script> <s
阅读全文
摘要:MVC三层架构 /* - 表现层:负责数据展示 - 业务层:负责业务处理 - 数据层:负责数据操作 MVC(Model View Controller),一种用于设计创建Web应用程序表现层的模式: - Model(模型):数据模型,用于封装数据 - View(视图):页面视图,用于展示数据 * j
阅读全文
摘要:事务的介绍: 什么是事务? 事务指数据库中多个操作合并在一起形成的操作序列。 事务的作用: 1.当数据库操作序列中个别操作失败时,提供一种方式使数据库状态恢复到正常状态(A),保障数据库即使在异常状态下仍能保持数据一致性(C)(要么操作前状态,要么操作后状态)。 2.当出现并发访问数据库时,在多个访
阅读全文
摘要:AOP开发思想 AOP概念 /*- AOP(Aspect Oriented Programing)面向切面编程,一种编程**范式**,隶属于软工范畴,指导开发者如何组织程序结构 - AOP弥补了OOP的不足,基于OOP基础之上进行横向开发 - OOP规定程序开发以类为主体模型,一切围绕对象进行,完成
阅读全文
摘要:什么是注解驱动 //注解启动时使用注解的形式替代xml配置,将繁杂的spring配置文件从工程中彻底消除掉,简化书写 注解驱动的弊端 /* - 为了达成注解驱动的目的,可能会将原先很简单的书写,变的更加复杂 - XML中配置第三方开发的资源是很方便的,但使用注解驱动无法在第三方开发的资源中进行编辑,
阅读全文
摘要:框架作用 spring简介 Spring是分层的JavaSE/EE应用full-stack轻量级开源框架. spring体系结构 spring优势 /* 1.方便解耦,简化开发 2.方便集成各种优秀框架 3.方便程序的测试 4.AOP编程的支持 5.声明式事务的支持 6.降低JavaEE API的使
阅读全文