Nginx Stream 配置
Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 安装环境 Centos 7.9 Nginx 1.20.1 安装方式Nginx 的安装不推荐使用 docker 安装。同时不推荐直接 yum install nginx,因为直接安装的话 Nginx 的版本会比较低。 所以建议安装官方最新文档版本。首先需要添加官方的仓库源。 创建文件并编辑 /etc/yum.repos.d/nginx.repo。添加以下内容: 12345[nginx]name=nginx repobaseurl=https://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1 添加完成后,保存并执行 yum install -y nginx 即可完成安装。安装完成后可以使用 nginx -v 检查版本。 12345678# 安装 Nginxyum install -y nginx# 查看版本nginx -v# 版本输出信息nginx version ...
Docker 安装及配置
Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松! 1. Docker 介绍Docker是什么?Docker属于容器的一种技术封装,提供更为简单易用的使用接口,让开发运维人员可以更方便快捷的使用容器。对比于传统的虚拟机技术,容器的优点非常明显。 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为 MB 一般为 GB 性能 接近原生 较弱 内存代价 很小 较多 运行密度 单机支持上千个容器 一般几十个 隔离性 完全隔离 完全隔离 迁移性 优秀 一般 从上面的对比来看,容器的各方面性能及特性是优于虚拟机的。 2. Docker 安装Docker是一个开放源码的产品,分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。 社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了,本文也仅针对社区版。 目 ...
Java 设计模式之模板方法模式
定义:一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 1. 优点与缺点模板方法模式的主要优点如下: 封装不变部分,扩展可变部分; 提取公共代码,便于复用和维护; 行为由父类控制,子类实现,符合开闭原则。 主要缺点如下: 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。 由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍。 2. 结构模板方法模式的 UML 类图如下图所示: 首先是一个抽象基类 AbstractTemplateMethod,它定义了一个模板方法 templateMethod,模板方法中定义了三个操作步骤,分别是抽象方法 abstractStepOne、abstractStepTwo 和 abstractStepThree。 123456789101112public abstrac ...
Java 设计模式之单例模式
定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 1. 特点单例模式有 3 个特点: 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点。 一般来说,系统中只需要有一个实例就能满足系统需要时,那么就可以设计成单例模式。 比如 Windows 的回收站,数据库的连接池,系统中的日志对象等等。(当然,如果你非要设计成多个,我也没有办法是不是) 2. 优点和缺点单例模式的优点: 单例模式可以保证内存里只有一个实例,减少了内存的开销。 可以避免对资源的多重占用。 单例模式设置全局访问点,可以优化和共享资源的访问。 单例模式的缺点: 单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。 在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象。 单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。 3. 结构单例模式的 UML 类图如下图所示,非常简单,只有一个类。 上述类图很好地体现 ...
Java 设计模式
1. 介绍设计模式是程序员在设计应用程序或系统时可以用来解决常见问题的最佳形式化实践。 设计模式可以通过提供经过测试的,经过验证的开发范例来加快开发过程。 重用设计模式有助于防止引起重大问题的细微问题,并且还可以提高熟悉模式的编码人员和架构师的代码可读性。 2. 分类设计模式共有 23 种设计模式,分为三大类:创建型模式(Creative Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。 创建型模式 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 装饰器模式 组合模式 外观模式 享元模式 代理模式 行为型模式 模版方法模式 命令模式 迭代器模式 观察者模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 访问者模式 3. 六大原则3.1 单一职责原则(SRP - Single Responsibility Principle) 定义:一个类应该有且仅有一个引起它变化的原因,否 ...
Spring Cloud Alibaba:Nacos Discovery 服务注册与发现
Nacos Discovery 是什么? 服务发现是微服务架构体系中最关键的组件之一。 如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。Nacos Discovery 可以帮助用户将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。 除此之外,Nacos Discovery 也将服务实例自身的一些元数据信息,例如 host,port,健康检查URL,主页等-注册到 Nacos 。 关于 Nacos 的安装及启动请查看文章:Spring Cloud Alibaba:Nacos 安装及使用 本篇将详细介绍 Nacos Discovery 服务注册与发现的一些技术实践。 快速接入添加依赖启动好 Nacos 服务端。然后在项目中添加依赖。 1234<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-n ...
Spring Cloud Alibaba:Nacos Config 配置中心
Nacos Config 是什么? Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。 Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。 在了解 Nacos Config 之前,如有需要可以先看下上一篇文章: Spring Cloud Alibaba:Nacos 安装及使用。 本篇将详细介绍 Nacos Config 配置中心的一些技术实践。 快速接 ...
Spring Cloud Alibaba:Nacos 安装及使用
Nacos 是什么? Nacos 致力于帮助开发者发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助开发者更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 Nacos 主要包含两个部分,一个是配置中心,一个是服务注册与发现。本系列的文章将依次对其进行分享介绍。 本篇将着重介绍 Nacos 的单机与集群安装及一些基本的使用。 版本说明 Windows: win 10 64位系统 Linux: Centos 7 64位系统 Nacos: 1.3.2 (当前最新稳定版本) Windows 单机安装下载软件包前往 GitHub Nacos Release 下载 nacos-server-1.3.2.zip 软件包到本地。 本地解压,目录结构如下图所示。 12345bin : 启动/关闭脚本conf : Nacos 的配置文件data : 未做持久化的时候数据会存储在此,比如配置数据 ...
Spring Boot 单例模式中依赖注入问题
在日常项目开发中,单例模式可以说是最常用到的设计模式,项目也常常在单例模式中需要使用 Service 逻辑层的方法来实现某些功能。通常可能会使用 @Resource 或者 @Autowired 来自动注入实例,然而这种方法在单例模式中却会出现 NullPointException 的问题。那么本篇就此问题做一下研究。 演示代码地址 问题初探一般我们的项目是分层开发的,最经典的可能就是下面这种结构: 123├── UserDao -- DAO 层,负责和数据源交互,获取数据。├── UserService -- 服务逻辑层,负责业务逻辑实现。└── UserController -- 控制层,负责提供与外界交互的接口。 此时需要一个单例对象,此对象需要 UserService 来提供用户服务。代码如下: 123456789101112131415161718192021222324252627@Slf4jpublic class UserSingleton { private static volatile UserSingleton INSTANCE; @R ...
Spring Boot 文件上传与下载
文件的上传及下载功能是开发人员在日常应用及编程开发中经常会遇到的。正好最近开发需要用到此功能,虽然本人是 Android 开发人员,但还是业余客串了一下后台开发。 在本文中,您将学习如何使用 Spring Boot 实现 Web 服务中的文件上传和下载功能。首先会构建一个 REST APIs 实现上传及下载的功能,然后使用 Postman 工具来测试这些接口,最后创建一个 Web 界面使用 JavaScript 调用接口演示完整的功能。最终界面及功能如下: 项目环境- Spring Boot : 2.1.3.RELEASE - Gredle : 5.2.1 - Java : 1.8 - Intellij IDEA : 2018.3.3 项目创建开发环境为 Intellij IDEA,项目创建很简单,按照下面的步骤创建即可: File -> New -> Project… 选择 Spring Initializr,点击 Next 填写 Group (项目域名) 和 Artifact (项目别名) 构建类型可以选择 Maven 或 Gradle, 看个人习惯 添加 W ...