- 博客(104)
- 资源 (5)
- 收藏
- 关注
原创 centos7中使用docker安装redis
v /home/redis/etc/redis.conf:/etc/redis/redis.conf 数据卷挂载,宿主机的redis.conf映射到redis容器中的/home/redis/etc目录下,可以理解为宿主机和docker容器共享这个文件。redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的redis.conf文件,最终找到的是宿主机/home/redis/etc/redis.conf文件。
2024-03-30 11:40:31 308
原创 docker容器间的文件同步
(这里用容器id也可以)在docker01容器的volume01目录中创建docker01.txt文件,会在docker02容器中的volume01中看到这个文件。这样就实现了数据的共享。在前一篇文章中,我们知道了如何自定义构建镜像。也知道了容器中的文件如何与宿主机之前同步。那么容器之间的文件如何同步呢?依然用前一篇文章中的镜像来演示。这里用了 --volumes-from,表示挂载数据卷实现数据共享。
2023-05-05 15:19:13 632
原创 自定义构建docker镜像
号是上下文路径,指镜像构建时打包上传到Docker引擎中的文件的目录,这里的.指当前目录。当我们在容器中的volume01目录下创建文件时,发现在宿主机的对应目录下也能看到文件。这里就能看到volume01,volume02对应的宿主机的路径了。执行这个命令后,我们使用docker images就能看到自己构建的镜像了。-t:镜像的名字及标签,如mycentos是名称,v1.1是tag。这样,我们就构建了一个自己的镜像,并且还实现了数据卷的同步。,所以这里的路径中有一段名称是随机生成的。
2023-05-05 12:37:57 608
原创 记SpringCloud Finchley.SR4中使用ribbon.listOfServers无效的坑
前一篇文章提到了我将项目的SpringCloud版本由Dalston.RELEASE升级到了Finchley.SR4。因为我没有使用Eureka,而是使用的ribbon.listOfServers来指定服务器,然后进行服务调用的,所以这里在升级后就遇到了一个坑:就是先前Dalston.RELEASE版本的时候服务可以调用成功,现在升级后反而服务调不通了。懊恼痛苦中。。。。。。。。。。。。我通过查看消费端的日志,发现消费端根本就没有获取到服务器地址。日志如下:2021-05-18 20:17:06.00
2021-05-19 23:49:16 2348 8
原创 SpringCloud版本升级——由Dalston.RELEASE到Finchley.SR4
之前的项目用的是SpringCloud Dalston.RELEASE版本,现在要升级到Finchley.SR4。这里面有很多需要注意的,这里分享一下,避免入坑。首先在父工程的pom.xml中修改版本号,这里用的是SpringCloud Finchley.SR4 和Springboot 2.0.8.RELEASE<dependencies> <dependency> <groupId>org.springfram
2021-05-18 17:43:21 434
原创 Springboot事件监听机制——异步、自定义监听事件(三)
在Spring事件监听机制(二)中,我们提到了在SimpleApplicationEventMulticaster类的multicastEvent()方法发送事件广播时,有一个Executor对象,如果它不为空,就会异步去执行发送广播。那么本篇文章,我们来看一下如何去异步执行发送广播事件。异步一、自定义类直接继承SimpleApplicationEventMulticaster这里我们为了方...
2020-05-04 21:56:37 1660
原创 Springboot事件监听机制——事件发布(二)
Spring中的事件监听前面我们大致了解了一下事件监听,我们接着来看看Spring中的事件监听是如何使用的。这里我选用了springboot 1.5.7的源码来学习。在启动类中执行SpringApplication.run()后,首先会执行SpringApplication类的initialize(Object[] sources)方法,然后初始化initializers和listeners两...
2020-05-01 18:51:17 1318
原创 Spring事件驱动机制(一)
观察者模式前面有聊过设计模式中的观察者模式,想必大家都应该有所耳闻。这里我们大致回顾一下,观察者模式中有几个角色:主题:主题中包含多个观察者,以及观察者的添加、删除,同时需要提供触发观察者事件的方法。观察者:也叫监听器,会有多个观察者,不同的观察者监听到事件后做不同的逻辑处理。关于设计模式具体讲解可以阅读博主写的另一篇文章:java观察者模式实现自己的事件驱动机制在spring中有很多...
2020-05-01 11:37:59 350
原创 java并发编程StampedLock
前面介绍的ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果我们深入分析ReadWriteLock,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的读锁。要进一步提升并发执行效率,Java 8引入了新的读写锁:StampedLock。StampedLock和ReadWriteLock相比,改进...
2020-04-13 18:51:48 401
原创 自定义类如何重写hashCode()和equals()
在面试中经常遇到这样一个问题,==和equals()方法有什么区别?很多时候,我们回答的都不算完全。这里总结一下:==分两种情况:1.基本数据类型,比较的是值相等2.引用类型,比较的是对象的地址equals分两种情况:若没有对equals()进行重写,则比较的是引用类型的对象的地址,和==效果一样若对equals()进行了重写,如String、Date等类,那么比较的是值是否相等。...
2020-04-10 15:54:24 1019
原创 centos中安装elasticsearch的head插件
安装nodejs安装了elasticsearch,我们要想用图形化工具操作es。可以选用head插件,由于head插件是nodejs开发的,我们得先安装nodejs。下载node-v9.9.0-linux-x64.tar并上传到服务器。解压:tar -xf node-v9.9.0-linux-x64.tar然后配置环境变量:export NODE_HOME=/usr/local/nod...
2019-09-08 12:20:11 149
原创 centos中安装elasticsearch
首先,下载elasticsearch压缩文件,然后上传到服务器。解压:tar -zxvf elasticsearch-6.8.2.tar.gz解压之后,进入到解压目录的bin目录,执行启动:./elasticsearch控制台出现异常:通过日志可以看出,不能以root账户启动elasticsearch。这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入...
2019-09-08 11:09:45 155
原创 Spring service调用当前类方法导致事务不生效
最近在项目中遇到一个问题,在service类中调用当前类的一个方法,没有开启事务,如下:@Service("userService")public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; //默认情况下Spring的声明式事务对所有的运行时异常进...
2019-05-18 19:24:17 1854
原创 Spring的事务的传播属性
Spring事务有7种传播属性:1.PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。2.PROPAGATION_SUPPORTS:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。3.PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。4.PROPAGATION_REQUIRES_NEW...
2019-05-18 18:19:43 497
转载 数据库设计的三大范式
第一范式(1NF):属于第一范式的数据库的表的列(属性)是不能再进一步拆分的。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行,但如果系统经常访问“地址”属性中的“城市”部分,那么一定要把“地址”属性拆分为省份、城市、详细地址等多个部分来存储,这样对地址中某一个部分操作的时候将非常方便,这样设计才算满足数据库的第一范式。编号姓名性别...
2019-05-13 18:19:51 122
转载 JVM核心之JVM运行和类加载全过程
类加载机制JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的java类型的全过程。加载将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口,这个过程需要类加载器参与。链接将java类的二进制代码合并到JVM的运行状态之...
2019-05-11 16:21:29 186
原创 ZooKeeper——开源客户端Curator
Curator是Netflix公司开源的一套ZooKeeper客户端框架,作者是Jordan Zimmerman。和ZkClient一样,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,目前已经成为了Apache的顶级项目。Patrick Hunt(ZooKeeper代码的核心提交者)以一句...
2019-03-22 18:01:03 409
原创 Zookeeper——Java客户端API使用
Zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,它对多种编程语言提供了API。下面重点来学习Zookeeper的Java客户端API使用。创建会话客户端可以通过Zookeeper(org.apache.zookeeper.Zookeeper)实例来连接Zookeeper服务器,有如下4种构造方式:ZooKeeper(String connectString, in...
2019-03-13 19:30:24 364
原创 LockSupport工具
LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread)方法来唤醒一个被阻塞的线程。方法名称描述void park()阻塞当前线程,如果调用unpark(Thread thread)方法或者当前线程被中断,才能从park()方法返回void parkNanos(long nanos)阻塞当前线程,最长不超过...
2019-02-28 16:06:09 315
翻译 websocket学习
WebSocket概念 websocket是HTML5开始提供的一种浏览器与服务器之间进行全双工通信的网络技术,WebSocket API被W3C定为标准。 在WebSocket API中,浏览器和服务器只需要做一个握手动作,两者之间就形成了一条快速通道。WebSocket基于TCP双向全双工进行消息传递,相比HTTP的半双工协议,性能得到很大提升。 具有以下特点:单一的TCP连接,采...
2018-08-01 15:21:27 553
原创 centos7中Nginx的安装与启动
Nginx是一款不错的服务器,可以用来做正向代理和反向代理及负载均衡。下面我们来说一下Nginx的安装步骤。 由于Nginx的安装环境需要gcc、pcre、zlib、openssl,因此我们首先需要在服务器上下载安装这些环境。 安装gcc:yum install gcc-c++安装pcre:yum install -y pcre pcre-devel安装zlib:yum i...
2018-04-21 18:12:07 347
原创 Java中的线程池
线程池的原理 当一个任务提交到线程池时,线程池的处理流程如下: 1)、线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。 2)、线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。 3)、线程池判断线程池的线程是否都处于工作状态。...
2018-04-05 19:48:37 146
转载 java中的synchronized和Lock
synchronized是java中的一个关键字,也就是说是Java语言内置的特性。java.util.concurrent.locks包下常用的类首先,我们先看一下Lock接口的API:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException;...
2018-03-24 18:15:58 201
原创 Netty服务端与客户端通信
最近开始学习Netty,服务端:public class TimeServer { public void bind(int port) throws Exception { /** * NioEventLoopGroup 是用来处理I/O操作的多线程事件循环器, * Netty提供了许多不同的EventLoopGroup的...
2018-03-18 16:50:41 725
转载 Redis配置文件的几大区域
查看redis的配置文件,会发现还是很有条理的。redis的配置文件被分成了几大块区域,分别是: 1.通用(general) 2.快照(snapshotting) 3.复制(replication) 4.安全(security) 5.限制(limits) 6.追加模式(append only mode) 7.LUA脚本(lua scripting) 8.慢日志(slow log) ...
2018-03-12 19:09:13 1046
转载 Redis的持久化
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。 Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以...
2018-03-10 13:01:54 179
原创 redis的发布订阅
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分:发布者、订阅者和Channel。订阅消息 发布消息 这里返回的2表示接收到该消息的订阅者的数量为2: 再次发布消息: 这里返回的1表示接收到该消息的订阅者的数量为1: ...
2018-03-09 17:21:49 181
原创 Linux中安装Redis与启动
首先,我们下载redis-3.2.5.tar.gz文件并上传到linux服务器上,然后解压:tar -zxvf redis-3.2.5.tar.gz然后make, 接着:make install PREFIX=/usr/localPREFIX = 存放的路径,你可以随意设置 按照以上的操作,会在/usr/local目录下生成一个bin文件,这个就是redis...
2018-03-09 15:56:55 158
原创 java 8之函数式接口
Java 8中函数式接口是一大新特性。本文就来说说Java 8 中的几种函数式接口。 一、Function接口 Function接口就是将传入的参数,通过一个或多个方法的迭代,输出和参数类型一样或者不一样的结果。 示例:// Function//toInteger的Function中的T类型必须与toString的Function中的T类型相同,FunctionString, I
2018-01-28 12:55:29 210
原创 外网ip注册dubbo服务
我们在调用服务器的dubbo服务时,有时候会调用不了。通过观察dubbo管理控制台,我们发现dubbo服务注册的是内网ip。因此我们需要做一些修改,让dubbo服务以外网ip注册。1,通过hostname命令得到机器名。 2,修改hosts文件,vi /etc/hosts,hosts内容如下: 通过hostname得的机器名为VM_12_66_centos,这里我们发现VM_12_66_cent
2017-08-03 17:57:08 6310 1
转载 Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)
org.springframework.web.filter中有一个特殊的类——DelegatingFilterProxy,该类其实并不能说是一个过滤器,它的原型是FilterToBeanProxy,即将Filter作为spring的bean,由spring来管理。配置DelegatingFilterProxy的常用方法如下所示:<filter> <filter-name>testFil
2017-07-25 16:51:59 348
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人