最新文章

文章排行

  • centos安装mariadb

    由于数据库有一下比较新的东西,所以要安装一下新版本的数据库 原计划是安装mysql的,由于各种原因就决定安装mysql的另一个分支mariadb了首先新增/修改这个文件""  '' /etc/yum.repos.d/MariaDB.repo往里面写入内容[mariadb]name = MariaDBbaseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDBgpgcheck = 1由于我比较想省事吧,就用工具直接打开这个文件,复制保存就行了然后运行安装命令yum -y install MariaDB-server MariaDB-client等一会安装完后再启动systemctl start mariadb开机启动systemctl enable mariadb然后是初始化设置mysql_secure_installation接下来是初始化设置了,复制粘贴一下网上的首先是设置密码,会提示先输入密码Enter current password for root (enter for none):<–初次运行直接回车设置密码Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车New password: <– 设置root用户的密码Re-enter new password: <– 再输入一次你设置的密码其他配置Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车初始化MariaDB完成,接下来测试登录mysql -uroot -ppassword完成。附上一些用户配置创建用户命令mysql>create user username@localhost identified by 'password';直接创建用户并授权的命令mysql>grant all on *.* to username@localhost indentified by 'password';授予外网登陆权限 mysql>grant all privileges on *.* to username@'%' identified by 'password';授予权限并且可以授权mysql>grant all privileges on *.* to username@'hostname' identified by 'password' with grant option;后记:其实大部分设置都可以用Navicat去完成。

  • 基于Linux的zookeeper客户端命令

    前言       之前我们已经通过“初探zookeeper“一文,对它有了初步的了解,这一节让我们更深入了解一下。      注:作者运行环境是centos,其实跟linux命令差别也没多大。基本操作首先我们进入zookeeper目录 cd /usr/local/zookeeper进入bin目录 cd bin重新启动zookeeper zkServer.sh restart打开zookeeper客户端 zkCli.shls+节点,可以看到该节点下有哪些节点stat+节点,可以看到节点的基本信息ls2+节点,就可以看到该节点下的节点和节点的一些基本信息,可以说ls2是ls和stat的合成体get+节点,可以看到该节点下存储的数据(当前为空)接下来我们解释一下这些基本信息的含义:cZxid 是创建之后分配的idctime 节点创建时间mZxid 修改时分配的idmtime 修改时的时间pZxid 子节点的idcversion 节点的版本号dataversion 当前节点数据的版本号aclVersion 权限版本号ephemeralOwner 判断是节点类型 0x0是永久节点dataLength 数据长度numChildren 下面子节点数量create创建临时节点只需要加参数 -e重启后发现temp消失了创建有序节点 -sset命令用来设置值通过get命令可以看到/lin下的数据参数如果我们执行就会报版本不一致的错误,这时我们只要输入正确的version才会执行成功,相应的version也会累加一通过get就可以看到设置值已经成功delete命令,不用说大家也都知道了,就是删除节点需要注意的是,如果节点有子节点会删除失败watcher机制针对每一个节点的操作都会有一个监督者->watcher当监控的某个对象(znode)发生变化时,则触发watcher事件zk中的watcher是一次性的,触发后就销毁父节点子节点增删改都能触发其watcher事件不同类型的操作,触发watcher事件也不同通过help命令,我们看到部分命令都有watch命令watch事件类型创建父节点触发:nodeCreated  修改父节点数据触发:nodeDataChanged删除父节点触发:nodeDeletedls为父节点设置watcher,创建删除子节点都触发nodeChildrenChanded事件,修改子节点不会触发事件说明:因为触发后就会销毁,所以每次触发完后都必须再设置watch事件watcher使用场景:统一资源配置(不同服务器统一配置)

  • 多选框全选实现

    页面代码,列表多选框  <c:forEach items="${list}" var="obj"> <tr id="tr${obj.id}"> <td><input name="searchId" type="checkbox" value="${obj.id}"></td> <td>${obj.product_code}</td> <td style=" word-wrap:break-word;word-break:break-all;white-space: normal">${obj.product_name}</td> <td style=" word-wrap:break-word;word-break:break-all;white-space: normal">${obj.category_name}</td> <td >${obj.old_cost_price}</td> <td >${obj.cost_price}</td> <td >${obj.old_price}</td> <td >${obj.price}</td> <td>${obj.nowPrice}</td> <td >${obj.rebate}</td> <td>${obj.num}</td> </tr> </c:forEach>多选按钮<input type="checkbox" name="checkAll">全选js代码$(function () { //全选按钮实现 $("input[name=checkAll]").click(function () { if (this.checked) { $("input[name=searchId]").prop("checked", true); } else { $("input[name=searchId]").prop("checked", false); } }); //反选实现 $("input[name=searchId]").click(function () { var allCheckBox=$("input[name=searchId]"); var same=true; var temp=allCheckBox[0].checked; for (var i=0;i<allCheckBox.length;i++){ if (allCheckBox[i].checked!==temp){ same=false; break; } } if (same){ $("input[name=checkAll]").prop("checked", temp); } else { $("input[name=checkAll]").prop("checked", false); } });});

  • 初探zookeeper

    前言         由于公司项目每次运行前都要启动zookeeper,之前并不太深入了解这个东西,所以就学习了一下,并记录下来。zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。来源于百度介绍,想了解更多可以自行搜索。下面进入正题。安装配置首先登陆官网 http://zookeeper.apache.org/点击调到下载页面我是下载历史版本-3.4.11版本然后把zookeeper-3.4.11.tar.gz上传至/home目录下进入该路径 cd /home解压  tar -zxvf  zookeeper-3.4.11.tar.gz重命名 mv zookeeper-3.4.11 zookeeper移动到/usr/local目录 mv zookeeper /usr/local配置zookeeper环境,修改/etc/profile文件添加内容备注:需要安装配置jdk目录介绍首先我们进入zookeeper目录cd /usr/local/zookeeper查看目录ll1.bin目录主要是一些运行命令进入bin目录cd bin.cmd主要是windows下的可执行命令,.sh是Linux下的命令2.conf存放配置文件具体设置内容tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口3.contrib附加的一些功能4.dist-maven mvn编译后的目录5.doc 文档打开index文件就可以看到详细文档6.lib需要依赖的jar包7.recipes案例demo代码8.src源码zoo.cfg配置详细tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口zookeeper基本数据模型1.树形结构2.每一个节点都成为znode,可以有子节点,也可以有数据3.每个节点分为临时节点和永久节点,临时节点在客户端断开后消失4.每一个zk节点都有各自的版本号,可以通过命令行来显示节点信息5.每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)6.删除/修改过时节点,版本号不匹配会报错7.每个zk节点存储的数据不宜过大,几k即可8.节点可以设置权限ACL,可以通过权限来限制用户的访问zookeeper作用体现1.master节点选举,主节点挂了以后,从节点就会接受工作,并且保证这个节点是唯一的,这就是所谓的首脑模式,从而保证我们的集群是搞可用的2.统一的配置文件管理,即只需要部署一台服务器,则可以把相同配置文件同步到其他的服务器,此操作在云计算中用的比较多(比如统一修改redis配置)3.发布与订阅,类似消息队列MQ,dubbo发布者把数据存在node上,订阅者会读取这些信息4.提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程的锁5.集群管理,集群中保证数据的强一致性zookeeper特性-session基本原理客户端与服务端之间存在会话每个回话都可以设置超时时间心跳介绍,session过期session过期,临时节点node会被抛弃心跳机制,客户端会向服务端发送ping包请求单机版进入配置文件cd /usr/local/zookeeper/conf复制一份配置文件cp zoo_samle.cfg zoo.cfg修改zoo.cfgdataDir=/usr/local/zookeeper/dataDirdataLogDir=/usr/local/zookeeper/dataDirLog在该目录下创建这两个目录mkdir dataDirmkdir dataLogDir进入bin目录执行./zkServer.sh start启动其他命令:status可查看状态restart重启stop停止这个时候我们已经启动了让我们来连接客户端,看看里面的内容输入help,我们就可以看到相关的指令我们可以输入ls+节点名就可以看到相关节点下的内容如果我们需要退出客户端,只需要按ctrl+c就可以退出,输入pwd就可以看到当前所在的文件下(持续优化更新)

  • zookeeper acl命令

    前言 acl(access control lists)权限控制针对节点可以设置相关读写等权限,从而保障数据的安全性权限permission可以指定不同的权限范围以及角色acl命令行通过客户端help命令,我们可以看到关于acl的一些命令getAcl获取某个节点的acl权限信息setAcl设置某个节点的acl权限信息addauth:输入认证授权信息,注册时输入明文账号密码,但是在zookeeper系统里,密码都是以加密形式存在的acl的构成zookeeper的acl通过[scheme:id:permissions]来构成权限列表(scheme:代表某种权限机制,id:代表允许访问的用户,permissions:权限组合字符串)world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone[permissions]auth:代表认证登录,需要注册用户有权限即可,形式为auth:user:password:[permissions]digest:需要对密码加密才能访问,形式为:digest:username:BASE64(SHA1(password)):[permissions]简而言之,auth和digest的区别就在于,前者明文,后者密文 setAcl /path auth:lee:lee:cdrwa与setAcl /path digest:lee:BASE64(SHA1(password))cdrwa是等价的,在通过addauth digest lee:lee 后都能操作指定节点的权限ip:当设置为ip指定的ip地址,此时显示ip进行访问,比如ip:192.169.1.1[permissions]super:代表超级管理员,拥有所有权限权限字符串缩写crdwacreate 创建子节点read 获取节点/子节点write设置节点数据delete删除子节点admin设置权限命令world:anyone:cdrwa图中我们把/lin的delete权限去掉,创建子节点,尝试删除它,可以看到删除失败,值得注意的是,但是我们是可以删除/lin的,只能控制子节点auth:user:pwd:cdrwa第一次添加失败是因为我们没有加上用户,所以我们要把用户添加才能进行该设置权限的操作(备注合理)虽然我们再次进行设置,但是我们发现用户密码还是没有变,还是按照第一个来digest:user:BASE64(SHA1(pwa)):cdrwa我们通过设置密文的权限我们发现退出后无法访问,通过明文密码登录才能进行操作addauth digest user:pwaip:192.168.1.1:cdrwa接下来我们讲最后一种:super,步骤如下1.修改zkServer.sh增加super管理员2.重启zkServer.sh通过操作我们可以发现,/lin是没有访问权限的,但是用管理员账号登录后就可以操作了ACL的常用使用场景开发/测试环境分离,开发者无权操作测试库的节点,只能查看生产环境上控制指定ip的服务可以访问相关节点,防止混乱

文章推荐

  • spring cloud bus的使用

    在上一节的spring cloud config中会存在一个问题,项目启动时候会读取远程配置,但是如果远程配置中心地址发生变更,本地的信息还是用以前的,这个时候就会需要spring cloud bus进行配置刷新 在config-server和应用层添加配置<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>使用这个需要mq支持,这里我用的是rabbitmq,使用docker安装,这些docker安装我就不阐述了,安装完docker使用这条指令就行了docker run -d --hostname my-rabbitmq -p 5672:5672 -p 15672:15672 --restart=always rabbitmq:3.7.3-management安装结束后访问:http://localhost:15672/,输入账号密码:guest / guest在config-server添加配置,过滤屏蔽management: endpoints: web: exposure: include: "*"(高版本可能有问题,调整spring boot版本为2.2.5.RELEASE, spring cloud版本为:Hoxton.SR3 即可解决)使用post请求访问端口:http://localhost:8080/actuator/bus-refresh,触发刷新,可以在rabbitmq看到消息在使用配置的地方启动刷新打开gitee,可添加webhook,每次代码有变动都可以触发接口

  • 爬坑freemarker

    前言        据说spring boot已经不推荐使用jsp,于是就决定用freemarker,也用它做过好几个项目了,所以就写篇文章记录一下爬过的坑。老规矩,介绍什么的就自行搜索吧!maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>使用文件后缀一定要用ftl后缀结尾,spring boot默认放在templates下后台返回页面,直接把templates后面的路径写入就行了return new ModelAndView("console/banner/add_view");问题如果变量为空,会报错,所以要赋默认值${(feature.resourceType)!''} //如果为NULL则赋一个空字符串,当然1、2、3随便赋值如果是布尔类型的${(feature.showed?string("1","0"))!'0'}' //true 1,false 0,null 0循环遍历时间转换${item.createTime?string('yyyy-MM-dd HH:mm:ss')}if判断三目运算${(selectCategoryId==0)?string('id=pagecurrent','')}插值首先我们定义一个footer文件,路径为templates/blog/base/footer.ftl然后在templates/blog/base/base.ftl引入它<#include "./footer.ftl"/>在我的项目里base.ftl都是每个页面的基本内容,如<html><body></body></html>,和一些公共的css/js文件引入文件,如果我们想减少每一个页面的代码量,可以把当成一个公共的页面模板。简单例子基础模板:base.ftl里面的部分代码使用模板打开该页面后转义不知道大家有没有遇到过变量遇到页面产生的特殊字符问题比如页面代码我们输入字符保存重新打开加载该值发现这不是我们存下的值,这是怎么回事,让我们查看一下页面代码不难看出变量中的双引号与value=""的双引号“中和了”现在我们可以使用“?html”解决这个问题效果如下类似的还有:js_string、json_string如果嫌麻烦的话,也可以用<#escape>,但得注意一点:<#escape>仅仅只对当前文件中的值做转义,而不会去处理嵌套的其它文件(Include)和宏

  • 初探zookeeper

    前言         由于公司项目每次运行前都要启动zookeeper,之前并不太深入了解这个东西,所以就学习了一下,并记录下来。zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。来源于百度介绍,想了解更多可以自行搜索。下面进入正题。安装配置首先登陆官网 http://zookeeper.apache.org/点击调到下载页面我是下载历史版本-3.4.11版本然后把zookeeper-3.4.11.tar.gz上传至/home目录下进入该路径 cd /home解压  tar -zxvf  zookeeper-3.4.11.tar.gz重命名 mv zookeeper-3.4.11 zookeeper移动到/usr/local目录 mv zookeeper /usr/local配置zookeeper环境,修改/etc/profile文件添加内容备注:需要安装配置jdk目录介绍首先我们进入zookeeper目录cd /usr/local/zookeeper查看目录ll1.bin目录主要是一些运行命令进入bin目录cd bin.cmd主要是windows下的可执行命令,.sh是Linux下的命令2.conf存放配置文件具体设置内容tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口3.contrib附加的一些功能4.dist-maven mvn编译后的目录5.doc 文档打开index文件就可以看到详细文档6.lib需要依赖的jar包7.recipes案例demo代码8.src源码zoo.cfg配置详细tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口zookeeper基本数据模型1.树形结构2.每一个节点都成为znode,可以有子节点,也可以有数据3.每个节点分为临时节点和永久节点,临时节点在客户端断开后消失4.每一个zk节点都有各自的版本号,可以通过命令行来显示节点信息5.每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)6.删除/修改过时节点,版本号不匹配会报错7.每个zk节点存储的数据不宜过大,几k即可8.节点可以设置权限ACL,可以通过权限来限制用户的访问zookeeper作用体现1.master节点选举,主节点挂了以后,从节点就会接受工作,并且保证这个节点是唯一的,这就是所谓的首脑模式,从而保证我们的集群是搞可用的2.统一的配置文件管理,即只需要部署一台服务器,则可以把相同配置文件同步到其他的服务器,此操作在云计算中用的比较多(比如统一修改redis配置)3.发布与订阅,类似消息队列MQ,dubbo发布者把数据存在node上,订阅者会读取这些信息4.提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程的锁5.集群管理,集群中保证数据的强一致性zookeeper特性-session基本原理客户端与服务端之间存在会话每个回话都可以设置超时时间心跳介绍,session过期session过期,临时节点node会被抛弃心跳机制,客户端会向服务端发送ping包请求单机版进入配置文件cd /usr/local/zookeeper/conf复制一份配置文件cp zoo_samle.cfg zoo.cfg修改zoo.cfgdataDir=/usr/local/zookeeper/dataDirdataLogDir=/usr/local/zookeeper/dataDirLog在该目录下创建这两个目录mkdir dataDirmkdir dataLogDir进入bin目录执行./zkServer.sh start启动其他命令:status可查看状态restart重启stop停止这个时候我们已经启动了让我们来连接客户端,看看里面的内容输入help,我们就可以看到相关的指令我们可以输入ls+节点名就可以看到相关节点下的内容如果我们需要退出客户端,只需要按ctrl+c就可以退出,输入pwd就可以看到当前所在的文件下(持续优化更新)