10分钟将本地项目部署到Docker
前言很多公司目前发布上线的时候还是手动将jar包打好,然后用Java命令行去启动,包括我现在所在的公司。这样做无疑是加大了人工成本,这次我打算利用Idea中的官方Docker插件,快速将本地项目发布到服务器的Docker并部署,同时集成后续持续更新的操作
安装Docker插件首先我们得确保Idea中具有Docker插件,在插件列表中搜索Docker,如果有下方这个插件我们则继续
DockerFileDockerFile是Docker中构建镜像的脚本文件,包含一系列的指令和配置,用来描述如何构建和配置Docker容器,我先简单介绍一下DockerFile中的常用命令,以命令(示例):详情的格式进行介绍
FROM(FROM java:7):基础镜像,构建的起点
COPY(COPY file /usr/local):将本地文件复制到镜像中的指定位置
ADD(ADD pom.xml /usr/local):将本地文件添加到Docker镜像中,这里要注意和COPY的区别,如果ADD移动的是压缩文件则会自动解压缩,COPY则不会
WORKDIR(WORK ...
在项目中引入ShardingJDBC并整合MybatisPlus
ShardingJDBC介绍SharingdJDBC是ShardSphere中的一种实现方式(ShardingSphere-Proxy是代理,相当于一个中间件,把所有的请求统一发到Proxy上,在Proxy上对请求进行处理;最后一个是Sidecar,相当于提供一个大网,将所有的数据库织起来,一般用于微服务中)它一个轻量级的Java框架,集成在程序里,通过jar包的方式提供服务,并且支持很多ORM框架,比如我们经常使用的Mybatis、JPA、Hibernate等等
ShardingJDBC的一些概念逻辑表:我们一般把结构和逻辑一致的表称为逻辑表,例如user表我拆分为了user01和user02,除了名字以外,其他都一样,那么user就是一张逻辑表。
真实表:真实表就是真实存在的表,上面的user01和user02就是真实表
广播表:公用的一些表,相当于抽象版的”工具类”
分片键:我们分表是按照哪个字段去分,这个字段就是分片键
分片算法:确定分片键后要如何去计算到具体的表。常用的有取模运算、hash算法以及范围算法`
分片策略:由分片键和分片算法组成。用于确定数据应该存储在哪个 ...
(待更新)深入了解gRPC并在项目中使用
传统的通信协议RMI(只能在Java应用之间实现通信) SOAP协议(数据格式为XML,过多的规范)
RESTful架构:基于HTTP协议。使用GET、POST、PUT、UPDATE等等,数据格式为JSON、XML等。缺点是文本的低效协议,需要编码解析等。必须提前知道客户端的接口数据,例如参数,返回码,数据结构。并且架构风格难以统一,每个人的开发习惯都不一样。
名词解释进程间通信:假设A服务需要B服务的某种数据,但是这两个服务都在自己独立的进程中,就需要通过网络来完成信息的传递
MySQL亿级数据量查询优化方案
背景最近业务上有一个需求,涉及到两张表的联查,条件也只有三个。是不是听起来很简单?但这两张表一张是2.5亿,一张是4.5亿。加起来将近7亿的数据。之前我自己了结的是MySQL单表数据建议存储量也就是2000w,所以听到这两张表的大小时也很震惊。但凡事都得有个解决方案,在使用了索引等工具,把这次的过程分享一下。
优化方向首先我们得先有一个方向,按照性价比从高到低分别是 索引的建立和优化->SQL语句的优化->表结构的优化->硬件层次的优化。索引是最简单而且效率最高的一种手段,我们一般在优化SQL的时候都会用到,再下来是SQL语句本身,只展示出需要的字段,以及SQL语句本身是否走了索引,索引是否失效等等,关于SQL优化理论可以看我这篇文章
MySQL理论
再往下是表结构的优化,首先是数据类型的选择,例如年龄,很多人用的是int类型存储,但完全可以使用tinyint来代替,将其从4字节变为1字节,同理还有char和varchar,varchar是可变字符,用多少占多少,而char是固定占用设置的空间,对于text的话,尽可能不去使用,再深度一点的就是对于数据存储的方式,水平 ...
基于docker的ELK的部署安装
前言我们在项目中排查错误第一时间会去查看日志,日志可以说在开发中起到了很重要的作用。目前很多项目使用的日志收集系统也主要以ELK和EFK这两种为主(EFK中F为Filebeat,和Logstash相比占用资源更少,并且侵入性低,下次有机会也写一篇。又给自己挖了一个坑)。这次还是以ELK为主,来教大家从0来搭一套ELK的日志收集系统。同样,本次我们也使用Docker来完成
ELK是什么?ELK是由三个开源的中间件组成。是一套分布式日志收集解决方案。其中E指的是Elasticsearch,一个NoSQL数据库,也是我们常用的搜索引擎,主要负责存储日志,L指的是Logstash,主要职责是收集日志,过滤日志,结构格式化,然后将处理好的日志发送到es。 K则是kibana,主要提供一个可视化界面,然后操作es,来帮助我们完成查询操作。
构建网络首先我们需要创建一个网络,来使这三个容器之间可以互相访问,完成通信。
我们在docker中使用下面这个命令来完成网络的创建
1234# 创建一个名为mynetwork的网络,指定ip地址为172.19.x.xdocker network create ...
在docker上安装Gitlab
gitlab介绍gitlab是一款基于git仓库的代码管理工具,可以帮助我们团队进行版本控制和协作开发。gitlab还提供了完整的持续集成/持续交付平台,能够自动化代码构建、测试、发布等过程,并且是一款开源的平台,公司也可以根据需求来进行定制化,满足不同团队,适应不同的需求和流程。
下载镜像12# 下载gitlab镜像docker pull gitlab/gitlab-ce
编写安装脚本注意我们这里要挂载三个目录,我的目录是在/usr/local/docker/gitlab下面的三个文件夹里面。其中/etc/gitlab为保存gitlab的配置文件,/var/log/gitlab为保存gitlab的日志文件,/var/opt/gitlab为保存gitlab数据文件。这里我用的端口号是9980
123456docker run --name gitlab --restart always \ -p 9980:9980 -p 222:22 \ -v /usr ...
谈谈Java的设计模式
设计模式设计模式是什么?设计模式是我们对问题所提出的解决方案,就像一个个蓝图,通过对问题的一些综合考虑,采用最合适的设计方案来解决问题。就像一个工具箱,我们要看具体的情况,来决定使用哪把工具。那么设计模式是如何诞生的呢,设计模式最开始也是一个解决方案,只不过这个方案在各种项目中得到了验证。最终得到认可,是前辈们一个个试验,一步一个坑踩过来,最终被后人们整理,收纳,所归类的出的一种新领域
设计模式的优点
提高我们的思维能力和设计能力
使程序的设计变得标准化、流程化,增强开发效率
对代码来说,提高了可读性和复用性以及可扩展性
设计模式的六大原则
开闭原则 对扩展开放,对修改关闭
里氏代换原则 任何基类可以出现的地方,子类一定可以出现
依赖倒转原则 对接口编程,依赖于抽象不依赖具体
接口隔离原则 使用多个隔离的接口,比使用单个好
迪米特法则 一个实体类尽量少与其他实体类有相互作用
合成复用原则 尽量使用合成/聚合,不使用继承
设计模式的分类创建型模式:通过提供创建对象的机制,增加已有代码的灵活性和可复用性
创建型有五种模式:工厂方法、抽象工厂、建造者、原型、单例
结构性模式:如 ...
简单谈谈我对ChatGPT的看法
近日,ChatGPT的爆火无疑是科技圈最大亮点。这款人工智能爆火的出现,会对我们的生活有什么帮助,有什么影响。这次我想以一个普通开发者的角度来聊一聊这个人工智能对我的影响。
我们先来看ChatGPT是如何介绍自己的:
它说自己是一个大型语言生成模型,训练了大量的文本数据。据说是有13亿左右。然而最让我震惊的是ChatGPT的上下文联想功能,它可以根据对话的上下文来回答,比如说你给它提了一个需求,它的回答你不满意,那么你可以直接指出它错误的地方,并告诉它正确的思考方向。我们可以完全用真人对话的逻辑完成人工智能的交互,这在以前是想都不敢想的(点名siri和小爱的死亡”抱歉,我没听清楚,请再说一遍”)
它有缺点吗?肯定是有的。如果你让它写一篇论文,它会说出一大堆道理和故事,虽然看着很完美,但是细看漏洞还是有的,什么草船借箭是周瑜的主意,引入的文献也是自己瞎编的,一本正经的胡说八道。但不可否认在某些事情上还是有用的,例如对于程序员来说,你可以说一个简单的需求,让它帮你完成一个简单的示例代码,或者非常复杂的逻辑SQL,你只要告诉它,再利用上下文,修改一些条件,就可以很灵活的完成需求,也可以提 ...
我的hexo备份方案
我们的hexo一般都是上传都github作为服务器,github里面存的都是编译好处理完成后的文件,而我们平时编辑博客则是需要在源码上完成。这会导致我们换一台电脑没有源码就编辑不了博客的问题。这次我来分享一下自己的hexo备份方案。原理很简单。在本地添加GIT,在上传之前把源码先提交推送到GITEE上。这样我们直接可以从GITEE上获取到源码
在GITEE创建私人仓库 使用clone拉下来 将里面的.git文件夹直接拷贝到博客根目录
在根目录运行CMD,然后使用命令推送到GITEE上 这里我的远程分支名字叫master
123git add .git commit -m "描述"git push -u origin master
在GITEE上看到推送上去的源代码了
之后发布博客只需要多加三步操作即可。添加,提交,推送
123456hexo cgit add .git commit -m "Backup"git pushhexo ghexo d
Tip:如果换了一台电脑 把GITEE上的源代码拉完之后执行 来完成he ...
prometheus+grafana实现项目监控
介绍prometheus,也叫普罗米修斯。是目前很流行的开源项目监控框架,在项目中引入即可收集项目的信息,然后通过服务器来完成上传。
grafana则是一个可视化工具。拥有比普罗米修斯更为丰富的功能和直观的页面。还可以做到邮箱报警,异常数据跟踪。
项目引入prometheus
我们加入2个依赖
12345678910111213 <!--普罗米修斯--><dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.9.0</version></dependency> <!--将项目内部信息暴露出来--><dependency> <groupId>org.springframework.boot</groupId> <ar ...