- 博客(56)
- 资源 (3)
- 收藏
- 关注
原创 cordova踩坑(二)-android9热更新失败
博主最近项目上需要对一个andorid9项目增加热更新功能。热更新功能就是不需要下载整个安装包,只更新改动过的文件,这样对于用户体验比较好。在增加热更新的过程中踩了个坑,因此写了这篇博文,有需要的小伙伴可以参考借鉴。
2025-01-19 09:24:14
213
原创 cordova踩坑(一)-android9打包失败
在项目文件里面搜索versioncompare,发现在cordova.gradle里面有这个包的引用声明,咋一看这个脚本用的还是jcenter的库,没有走博主定义的全局gradle配置。因此只需要在加上阿里云的maven仓库地址即可。博主在使用cordova打包android9的时候,出现了如下错误,找不到com.g00fy2:versioncompare:1.3.4。点击打包提示的链接,发现jcenter里面确实没有versioncompare这个包。配置加上后,继续打包,可以发现项目打包成功了。
2025-01-19 08:27:51
367
原创 quartz框架(十)-QuartzSchedulerThread
QuartzSchedulerThread本篇博文,博主将介绍QuartzSchedulerThread的相关内容。话不多说,直接进入正题。什么是QuartzSchedulerThread?从源码和该类的名称上,QuartzSchedulerThread首先是一个线程类,因此它继承了Thread类。从这一点上看,代码的自解释性非常重要。从quartz框架整体上而言,QuartzSchedulerThread相当于管理者线程,它从JobStore中获取需要触发的任务,交给ThreadPool线程池去分
2022-03-17 23:48:22
1313
原创 quartz框架(九)-JobRunShell
JobRunShell上篇博文,博主讲了Listener相关的内容。本篇博文,博主将要详细介绍一下JobRunShell的功能。简单的来说,JobRunShell就是Job实例运行时所在的环境,也就是说在JobRunShell中调用Job接口的execute方法。Runnable接口在讲解JobRunShell之前,我们先了解或者加强一下Runnable接口的相关知识。在java编程中,创建Thread一般有三种方式。第一种是定义一个类去继承Thread类,并重写run方法。第二种是在创建Thread
2022-03-16 22:14:02
1214
原创 quartz框架(八)-Listener
Listener上篇博文,博主介绍了jobStore相关的内容。本篇博文,博主将介绍quartz框架中监听器的使用以及原理。监听器在开源框架中十分常见,通过监听器我们可以实现一些定制化的功能。什么是Listener?监听器就是在某一个事件发生的时候,被监听对象会根据对应事件,循环调用监听对象(监听对象需要监听器对应的方法)的方法。这么说的话,是不是跟设计模式中的观察者模式一模一样。关于quartz框架中使用到的设计模式,博主会在后面的具体某一篇文章中详细介绍。JobListenerJobListe
2022-03-16 20:35:34
1034
原创 quartz框架(七)-JobStore
JobStore在之前的博文中,博主已经写了关于Job的相关内容。本篇博文,博主将介绍JobStore相关的内容。JobStore是存放Job和Trigger的地方。当我们调用Scheduler对象的scheduleJob时就会将其存入JobStore中,然后供quartzSchedulerThread使用。为什么需要JobStore?因为我们需要被Scheduler调用的任务大多数并不是一次性的任务,而是需要被定时触发,或者某个时间点才能被触发的。因此我们需要一个容器来存储Job和Trigger的
2022-03-13 12:15:55
2626
原创 quartz框架(六)-ThreadPool
ThreadPool本篇博文,博主将介绍Quartz框架中ThreadPool线程池相关的内容。线程池顾名思义,就是一个可以帮助我们来进行线程资源管理的对象。在web开发中,常见的就有数据库连接池,http连接池,redis连接池等。在看这篇文章之前,读者需要先具备一定的多线程和锁的知识,如使用wait和notify方法,实现生产者和消费者功能。为什么要用线程池?线程池可以复用线程,减少线程的创建和销毁次数。可以提高程序的响应速度。可以对线程资源进行统一管理,比如监控。…接口定义quar
2022-03-12 23:43:38
2516
原创 quartz框架(五)-Trigger相关内容
Trigger相关内容上篇博文,博主介绍了Job的相关内容。本篇博文,博主将介绍Trigger相关的内容。TriggerTrigger是触发器的意思,它只定义Trigger相关属性的Get方法。一个Trigger只能关联一个Job,而一个Job可以关联到多个Trigger。Triigger的相关接口如下:getKey,Trigger的唯一标识。getJobKey,关联Job的唯一标识。getStartTime,开始触发时间。getEndTime,结束触发时间。getNextFireTim
2022-03-12 21:38:57
749
原创 quartz框架(四)-Job相关内容
Job相关内容本篇博文,博主主要介绍job相关的内容。Jobjob是业务方法需要实现的接口,代表需要被调度框架进行调度的任务。job源码如下所示,从源码中我们可以看到,job接口只有一个excute方法,它的入参只有一个JobExecutionContext,并且允许抛出JobExecutionException异常。public interface Job { void execute(JobExecutionContext context) throws JobExe
2022-03-12 18:13:13
1089
原创 quartz框架(三)-调度器创建之实例化
调度器创建之实例化博主的前一篇博文主要介绍了schedule创建时的配置文件加载,下面博主将介绍一下scheduler的instantiate方法。代码回顾public Scheduler getScheduler() throws SchedulerException { if (cfg == null) { initialize(); } SchedulerRepository schedRep = SchedulerRep
2022-03-12 16:12:37
1042
原创 部署-jenkins发布项目到windows环境
使用openSSH的方式如果我们项目的部署环境在windows环境上,我们可以选择给服务器安装openSSH的方式,然后以脚本的方式进行部署。也可以通过web容器的对外访问地址,发布到web容器上(如tomcat容器)。下载openSSH安装包博主这里的操作系统是64位的,因此选择这里选择64位的zip包进行下载。安装openSSH服务将zip包进行解压,然后以管理员的方式运行cmd命令行工具,并执行下图所示的命令。cd "D:\Program Files (x86)\OpenSSH-Win6
2020-09-16 02:03:00
4240
原创 部署-jenkins发布项目到linux环境
使用openSSH的方式如果jenkins跟服务器不在同一台服务器上,这时候我们可以借助ssh的方式将打包好的jar包发送到远程服务器,然后以后台的方式运行程序。安装publish over ssh插件这里我们需要使用到publish over ssh插件,并且是以rsa免密的方式登陆。这里配置ssh连接时使用的私钥信息,远程服务器的ip地址,用户名和远程目录。然后配置构建任务中执行的ssh操作。开始构建任务使用deploy to container插件如果没有安装deploy to c
2020-09-16 01:09:59
514
原创 部署-jenkins与gitlab结合使用
jenkinis配置在之前的博文中,博主已经搭建好了gitlab和jenkins环境。接下来,博主就要进行gitlab和jenkins的联合使用。源码仓库配置这里,我们需要配置一下gitlab中代码的仓库地址,和gitlab用户的credentials认证方式,博主这里使用的username/password方式。配置触发构建的时机Trigger builds remotely (e.g., from scripts),通过脚本远程触发,如http调用。build after other p
2020-09-13 20:03:40
1292
原创 部署-docker推送镜像到远程仓库
docker推送镜像到远程仓库如果我们想将这个镜像提供给别人使用时,我们可以将镜像推送到远程仓库,然后别人从远程仓库中下载即可,提交更改在镜像的运行过程中,我们对镜像进行了修改,这时候我们首先需要进行提交操作。docker commit container_id image_name:version提交之后,我们再来查看本地仓库中的镜像。给本地镜像打标签博主这里使用的是aliyun的镜像仓库,我们对需要推送到远程仓库的镜像打一下标签。docker tag [ImageId] regist
2020-09-13 18:57:27
3303
原创 部署-gitlab克隆地址踩坑
gitlab克隆地址踩坑gitlab中的web界面的默认端口是80,ssh端口为22端口。而一般情况下,我们的服务器或者本地电脑 已经占用了这俩个端口,那么我们就需要进行端口映射。而博主使用的是docker运行的gitlab镜像,可以直接在运行的时候进行端口映射,但是在克隆项目的时候,克隆地址没有发生变化,这时候就需要改动gitlab的配置文件。docker运行指令docker run -d -p 10000:10000 -p 2222:22 --name gitlab-dev gitlab/git
2020-09-13 16:56:56
5911
9
原创 部署-docker安装jenkins
什么是jenkinsjenkins是基于java开发的一种持续集成的工具,提供了web界面来进行jenkins的配置与管理。jenkins通常与版本管理工具一起使用,可以实现程序的自动化集成和部署。安装jenkins博主这里使用docker来安装jenkins软件。拉取jenkins镜像这里需要注意的是jenkins官方镜像已经不再维护,需要使用jenkins/jenkins镜像。想了解的小伙伴可以去dockerHub上查找官网镜像的说明。docker pull jenkins/jenkins:
2020-09-13 14:16:50
280
原创 部署-docker安装gitlab
gitlab简单介绍gitlab是一个私有的源代码管理系统,提供了web界面给用户进行访问和操作。gitlab存储的仓库是服务端的,需要跟本地的仓库进行配合使用,而本地的仓库管理我们则需要借助于git工具。安装gitlab在拉取gitlab镜像时,如果下载速度非常慢,可以检查一下自己的docker镜像源是否配置成了国内镜像。gitlab服务器配置要求这里需要注意的是gitlab的服务器配置有最低要求配置,如果开启后访问web页面出现502错误,或者ssh远程连接太迟响应,有可能是服务器的配置不够。
2020-09-12 23:17:46
224
原创 部署-docker资源踩坑
docker资源踩坑博主在自己的电脑上,使用docker运行gitlab镜像的时候,发现docker命令失去了响应。但是根据网上的资料显示,gitlab最低配置只需要2核,4GB内存就可以了,而博主的电脑配置明显比这个高。使用管理界面给容器分配资源博主电脑使用的是win10系统,可以在docker管理界面中,对容器运行时的最大资源进行限制,如下图所示:博主设置了2核,6GB内存,1GB交换区的配置。在应用了新的配置之后,docker会进行重启。查看容器运行时的资源消耗docker stats
2020-09-12 15:01:49
210
原创 部署-centos安装docker
docker简单介绍docker是一门容器虚拟化的技术。它能够实现环境+软件一起打包的效果,因此它能避免因为环境不一样而导致的各种问题,大大的提高了软件的部署效率。而且在docker仓库上已经有非常多的镜像可以选择,当我们需要安装某些软件时,可以直接从docker仓库中查找并进行安装,减少手动配置的工作量。本机环境博主这里的服务器环境是centos8,不能直接使用官网推荐的安装方法进行安装。#查看本机linux系统,博主的是CentOS Linux release 8.2.2004 (Core)c
2020-09-12 10:42:58
201
原创 git学习(一)-fork操作
fork操作对于某一个项目来说,如果自己不属于开发者中的一员,那么只能先fork别人的代码,然后将代码拉取到本地进行修改之后,再向原来的项目发起pull request。fork项目克隆项目到本地执行下面命令,将项目拷贝到本地。git clone https://github.com/coder-chenhao/java-design-patterns.git添加源仓库git remote add upstream https://github.com/iluwatar/java-desi
2020-09-03 00:33:42
5051
原创 mysql踩坑(二)-字符集与排序规则
字符集mysql数据库支持多种字符集,并且在支持服务器、数据库、表、列和字符串常量等不同层次单独指定字符集。查看字符集查看服务器的默认字符集show variables like 'character_set_server'查看数据库的字符集,如果在创建数据库的时候没有指定字符集的话,那么就会使用服务器的默认字符集。show create database erp;查看表的默认字符集,这时候如果没有指定字符集,则会默认使用数据库的字符集。show create table user;
2020-09-02 23:16:12
881
原创 mysql踩坑(一)-大小写规则
mysql大小写在实际的项目中,大家或多或少都会遇到过mysql数据库大小写的问题。下面,博主将简单的介绍一下mysql数据库的大小写问题。sql关键字和函数名在mysql数据库中,sql关键字和大小写 是不区分大小写的。下面语句的俩种写法,mysql都能够正常的执行。/*全小写*/select now();/*全大写*/SELECT NOW():数据库名和表名博主在一次数据库的迁移时,就碰到了数据库表名大小写的问题。在windows服务器上运行好好的应用,在mysql数据库迁移到li
2020-09-02 21:53:29
2721
原创 maven实战-源码和依赖分离
源码和依赖分离博主在接触一个新项目的时候,发现这个项目打包出来的jar包非常的小,这样在替换测试环境的jar包时就会显得十分有优势。通过查看pom文件得知,原来这个项目用到了maven-dependency-plugin和maven-jar-plugin俩个maven插件。实现逻辑我们的目的是实现源码和依赖分离,也就是在打包的时候需要将源码和依赖分开,这时候我们需要先借助maven-dependency-plugin插件在打包前将依赖复制到一个路径a,然后打包的时候指定classpath就是我们之前复
2020-08-29 23:26:41
643
原创 idea插件(一)-lombok
lombok使用博主在创建springboot项目的时候,发现初始化向导中有推荐一个lombock插件,因此特地写了一下这篇文章来加深自己的印象。lombok是一个插件,它提供注解的方式来帮助我们生成一些样板代码,如get和set方法,全参构造函数,无参构造函数,静态日志变量等。环境配置博主这里介绍一下idea下怎么使用lombok插件。idea安装插件在settings->plugins选项中,搜索lombock插件,点击安装即可。搜索不了的同学,可以去idea plugin官网下载,然后
2020-08-29 22:06:29
320
原创 内存排查(三)-使用arthas工具
使用arthas工具arthas是Alibaba开源的Java诊断工具。arthas可以帮助我们解决一下问题:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?怎么快速定位应用的热
2020-08-28 00:57:39
2961
原创 内存排查(二)-使用jdk自带工具
jdk自带工具在实际的项目开发当中,我们可以会碰到java程序占用内存过多,甚至导致进程被系统杀死的情况。那么我们可以使用什么工具来监控系统的内存使用情况呢,下面博主将简单的介绍一下jdk自带工具来监控系统的内存情况。查找占用cpu或者内存过高的java进程博主这里使用的springbootx项目,并且以jar包的方式运行。所以可以使用下面的命令来查看java进程。top | grep javajps命令使用jps命令,可以查看jvm虚拟机中的进程,也就是说可以通过这个查看正在运行的java
2020-08-27 21:26:05
316
原创 内存排查(一)-查看linux服务器配置信息
查看服务器配置在我们平时的项目开发当中,可能很多人都没有详细了解过linux服务器的配置,如CPU信息,磁盘信息,内存信息等。linux服务器的配置信息 不像windows一样可以直接通过任务管理器来查看,这里讲诉的是如何使用shell命令来获取我们想要了解的信息。linux发行版本信息我们可以使用lsb_release来查看linux系统的发行版本信息。#-d代表明细信息lsb_release -d执行命令之后,我们可以看到对应的版本信息,博主这里使用的是centos8。linux系统位
2020-08-27 20:05:27
514
原创 mysql-crontab和mysqldump实现热备份
mysql简单热备份这里我们讲的是mysql自动热备份,热备份就是说我们不需要将机器停止,就可以将数据给备份出来。并且这里的自动热备份是基于某个时间点的自动热备份,也就是说不是实时的热备份,实时热备份可以基于binlog来实现。shell脚本数据库连接信息配置这里,我们需要导出的是mysql数据库的备份信息,所以我们需要先进行数据库连接信息的配置。mysqldump导出备份mysql数据库导出备份信息需要使用到mysqldump这个命令,详细使用可以使用mysqldum --help命令查看。
2020-08-27 12:04:43
227
原创 logback-日志深入使用
logback日志深入使用在之前的博文中,博主已经简单的介绍了logback的配置文件以及简单的使用。下面,博主将介绍一下logback的一些其它用法。格式化输出logback的方法可以支持我们进行格式化输出,我们再也不用手动进行字符串的拼接了。logger.info("name:{}","123456");查看输出结果:自动删除历史文件在实际的项目开发当中,对于测试环境或者生产环境的日志,如果没有经过程序的处理,可能需要我们人为定期进行日志的清理。因为如果日志长时间不清理,可能会造成磁盘
2020-08-27 00:06:37
691
原创 jmx简单入门
jmx入门jmx是Java Management Extensions的缩写,即java管理拓展。我们可以使用jmx对程序的运行状态进行监控和管理。使用jmx下面我们就简单的使用jmx来实现配置bean属性的动态修改。动态修改的意思就是在不重启服务器的情况下,实现配置属性的变更。提供管理信息//接口要以MBean结尾public interface HelloMBean { String getName(); void setName(String name);}//实现类
2020-08-26 21:17:30
297
原创 rmi远程方法调用入门
rmi入门rmi(Remote Method Invocation)是java本身提供的一种rpc框架,它允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。调用步骤1、客户调用客户端辅助对象stub上的方法。2、客户端辅助对象stub打包调用信息(变量、方法名),通过网络发送给服务端辅助对象skeleton。3、服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真
2020-08-25 22:51:12
210
原创 使用nginx解决浏览器跨域
什么是浏览器跨域?跨域就是指浏览器具有同源策略,浏览器不会执行访问其它网址数据的js脚本,比如说访问其它网址的cookie数据,调用其它网址的api接口。什么是同源?协议,域名,端口均相同的情况下才算同源,只要有一个不同就不算同源。跨域请求分类跨域请求主要分类俩类,一种是简单请求的跨域,另外一种是非简单请求的跨域。简单请求跨域简单请求的请求方式为GET,HEAD,POST请求,而POST请求中只包含了text/plain,multipart/form-data,application/x-ww
2020-08-21 00:21:21
345
原创 使用https和响应头来解决浏览器跨域
前言博主的使用nginx来解决浏览器跨域问题中,已经介绍了什么是浏览器跨域。接下来,博主来介绍一下怎么使用https和响应头来解决浏览器跨域问题。解决跨域问题这里介绍一下跨域实践的相关环境:前端程序:8182端口,部署在本地。后端程序1:8084端口,部署在本地。后端程序2:443端口,部署在阿里云服务器,采用域名访问(因为https证书绑定的是域名)添加跨域响应头从浏览器给出的跨越提示中,我们只需要在后端的响应中添加上跨域的响应头,博主这里使用的是springboot项目,代码如下:
2020-08-21 00:03:47
3190
原创 部署-centos安装java环境
安装java环境博主这里使用的是aliyun的centos系统,想要在上面运行java程序,就得先安装一下java环境。博主在后面的文章中会使用docker来运行其它软件的镜像。使用yum工具进行安装在centos系统中,我们可以使用yum前台包管理工具来进行软件的安装。首先我们先查看linux系统中是否装有java环境。java -version执行上面的命令后,我们来查看结果。查看可用的jdk安装包这里博主安装的jdk8,我们先查看一下yum源提供了jdk8的版本。yum list
2020-08-20 21:27:29
216
原创 springboot-使用validator进行参数校验
参数校验在日常的项目开发中,我们为了数据的正确性,后端都会单独对数据进行校验,比如说用户信息中的年龄校验,用户名长度校验,用户性别校验等。校验方式分类我们常见的校验方式分为俩种,一种是使用校验类来进行校验,另外一种是使用spring validator或者hibernate validator。使用手动方式进行校验,虽然可以将常用逻辑的校验抽取成方式,但是代码中还是会存在很多校验方法的调用,显得不那么简洁。使用validator博主这里主要介绍一下如何使用hibernate validator来进
2020-08-19 23:30:40
1107
原创 logback-结合spring profile使用
什么是spring profile?spring profile就是spring的多环境配置功能,可以通过执行激活的profile来进行配置环境的快速切换。开始使用创建多个logback配置文件这里我们使用默认的logback.xml 和 dev环境下的logback-dev.xml。这俩个配置文件之间的区别就是logback-dev.xml不将日志打入到控制台。logback.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><co
2020-08-15 13:15:20
7326
原创 部署-shell脚本实现远程部署
什么是shell脚本?首先我们要了解一下shell的概念。shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。而shell脚本则是shell程序可以解释和运行的指令。实现远程发布前景介绍博主所在公司的项目开发流程当中,前后端项目都是交于后端同学来打包部署。由于没有使运维,也没使用jenkins来实现项目的自动发布。导致在前后端联调发布新版本的时候,每次都需要后端同学手动来实现项目的部署,非常费时费力。出于折衷的目的,博主先推动了shell脚本来实现自动发
2020-08-15 10:19:27
1442
原创 部署-ssh使用rsa登录配置
什么是ssh?ssh专为远程登录回话和其他网络服务提供安全性的协议,利用ssh协议可以有效的防止远程管理过程中的信息泄露问题。使用ras公钥登录linux操作环境本地服务器:win10远程服务器:centos 8git环境生成rsa文件在windows机器上,我们可以在git bash界面上输入以下命令。ssh-keygen -t rsa查看执行结果,这时候连续回车即可,注意id_rsa和id_rsa.pub文件一定要在当前用户的.ssh目录下面,ssh公钥登录的时候默认读取该目录下面
2020-08-14 22:35:18
8860
原创 quartz框架(二)-调度器创建之配置文件加载
配置文件源码解析博主的前一篇博文主要介绍了quartz的入门使用,现在博主就来讲解一下quartz配置文件的加载流程。代码回顾public class Main { public static void main(String[] args) throws SchedulerException { //创建一个jobDetail的实例,将该实例与HelloJob Class绑定 JobDetail jobDetail = JobBuilder.newJob(Te
2020-08-11 20:32:56
833
原创 cordova插件(二)-hot-code-push-plugin
插件介绍基于cordova框架,我们可以将h5资源打包成app。然后通过热更新插件可以实现h5资源的热更新,而不用重新发布到应用市场,让客户再从应用市场下载。插件的使用插件安装cordova plugin add cordova-hot-code-push-plugin从图片可以得知,我们还需要安装cordova-hot-code-push-cli工具,它可以帮助我们更好的进行热更新插件的相关操作。生成cordova-hcp.json文件执行下面的命令,并进行相关的参数的配置后,我们就可
2020-08-11 00:00:49
966
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人