自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MassiveStars的博客

Never too high, never too low.

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 从JVM的退出机制分析Java程序的优雅关闭退出

JVM的退出可以分正常退出、异常退出和强制退出,每种退出方法的不同会产生不过的情况,汇总如下:Linux操作系统关闭不完全支持优雅退出,原因是Linux关闭时先会向进程发送SIGTERM信号,等待一段时间进程还没退出时就会强制关闭进程,所以Linux只会给一定时间让进程关闭退出。JVM可通过以下几种方式正常退出最后一个非守护线程结束。JVM被中断(通过ctrl + c或发送SIGINT信号)。JVM被终止(通过发送SIGTERM信号,即或kill PID某个线程调用或。当。

2024-03-18 00:03:27 1041 1

原创 Spring事务注解@Transactional的流程和源码分析

在事务处理中事务的定义类TransactionDefinition有很多衍生类和接口,它们的属性从事务注解@Transactional解析而来,在原码里名称为txAttr,关系如下:其中DelegatingTransactionAttribute的类图:图上那一系列类和接口,虽然比较绕,但都是和事务的定义有关。

2024-03-07 22:01:58 1267

原创 Java计划线程池ScheduledThreadPoolExecutor运行流程和源码分析

继承自线程池,并在其基础上增加了按时间调度执行任务的功能,如果对Java线程池ThreadPoolExecutor运行机制和源码解析。首先来翻译一下这个类的前面的单词scheduled: 预先安排的,按时刻表的;定期的。那么ScheduledThreadPoolExecutor可翻译为计划线程池、定时线程池。大多数时候,线程池已经使用了池化技术很好的满足了线程的重复使用需要,为什么还要另外搞一个ScheduledThreadPoolExecutor呢?无法设置任务在指定时间点执行。

2024-02-26 22:42:21 826

原创 Java线程池ThreadPoolExecutor运行机制和源码解析

线程的每次创建和销毁都会产生的一定的系统资源和时间的开销。正如几乎所有重资源都使用池化技术(数据库连接池、redis连接池等)进行管理,线程作为操作系统宝贵的资源,对它的使用需要进行控制管理,线程池就是使用了池化的技术对线程进行复用和管理。快速响应用户请求线程的启动需要一定时间开销,而使用了池化的线程时,当任务到达,节省了这部分的时间。Tomcat就使用自行扩展的ThreadPoolExecutor处理http请求,减小响应时间。减少资源开销。

2024-02-20 19:52:38 718

原创 Spring Cloud Netflix Eureka组件服务注册及发现源码浅析

Spring Cloud简介微服务这个概念已经深入人心,是最近几年的最热门技术话题之一,Spring Cloud是最流行的开源微服务框架。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发, 如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署...

2018-03-28 23:00:18 3000

原创 ThreadLocal的源码分析和理解

ThreadLocal的字面意思就是线程的本地变量,也就是说线程的局部变量。ThreadLocal在每个线程中都有自己的副本,亦即一个线程一份数据,相互之间不影响。 ThreadLocal提供get和set访问方法,使用get时总是返回set方法的最新值。ThreadLocal一个典型的应用就是减少一个线程内的参数传递,如数据库连接JDBCConnection或用户的Session,避免每个方法...

2018-03-18 16:51:12 1174 1

转载 余弦cos计算相似度

余弦计算相似度度量相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余...

2018-03-18 16:24:18 21073 2

原创 Docker实践 - docker + svn + maven + tomcat 部署Java Web项目

要准备的环境 docker maven jdk svn docker官方的tomcat镜像 有关环境的安装和配置可参考 linux下安装JDK linux系统安装maven 安装Docker并在容器里运行tomcat centos下安装svn可以用yum快捷安装yum install svn要实现一键部署其实就是要写一个脚本帮助我们

2017-01-12 21:05:54 6918 2

原创 Docker实践 - 使用maven插件自动部署web应用至Docker容器的tomcat

此前在一篇文章有讲到将maven项目部署至tomcat 使用maven的tomcat插件实现webapp的自动部署本文就是将maven-tomcat-plugins和Docker结合起来,将web应用部署至运行tomcat的容器配置maven在pom.xml加入 <plugins> <plugin> <groupId>org.apache.tomc

2017-01-12 00:22:10 5110

原创 Docker实践 - 安装Docker并在容器里运行tomcat

随着微服务的流行,Docker越来越流行,正如它的理念”Build, Ship, and Run Any App, Anywhere”一样,Docker提供的容器隔离技术使得开发人员不用再去理清server里的各种环境配置,轻松把应用运行起来。我们只需把运行环境的配置和应用封装在Docker的镜像(image),然后使用Docker运行这个镜像即可。Docker可以说是给所有开发人员的一个福利包,学

2017-01-11 22:58:39 37315 7

原创 使用maven的tomcat插件实现webapp的自动部署

前言maven已经成为Java项目事实上的构建标准,如果能自动将项目部署至tomcat还是能节省很多人力的。下面我们使用maven的tomcat插件将web项目打包好的war包部署至tomcat里。在项目的pom.xml加入tomcat7-maven-plugin插件 <plugins> <plugin> <groupId>org.apache.

2017-01-10 22:01:38 2263 1

原创 配置nginx + keepalived双主模式(双机互为主备)

前言 此前已经写过一篇使用keepalived实现nginx的高可用 这种方式有一台机器一直作backup使用,比较浪费资源使用keepalived来实现nginx的高可用下面来配置nginx+keepalived的双主机双机热备,这种配置下有两个Virtual IP,两个机器互为主备,最后我们把域名DNS服务器解析至两个Virtual IP即可。环境介绍两

2017-01-09 20:03:20 9072 3

原创 设置Linux下vi和vim语法高亮、显示行数

vim默认情况下已经有语法高亮了,现在我们要设置打开的时候默认显示行数。而对于vi我们只需在使用的时候默认使用vim即可。1、vim加入语法高亮和显示行数功能若要对全部用户起作用vi /etc/vimrc在最后加入syntax onset nusyntax on 开启语法高亮set nu 显示行数 若找不到vimrc文件可以全局查找 find / -name “vimrc”

2017-01-07 00:02:56 16337

原创 使用Spring和Atomikos集成JTA分布式事务

分布式事务分布式事务是指事务位于不同的分布式系统的不同节点之上。目的是保证分布式系统事务的原子性和一致性。XA规范是由X/Open DTP提出的分布式事务规范。XA规范包含四大角色:应用程序( AP )事务管理器( TM )资源管理器( RM )通信资源管理器( CRM )常见的事务 管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息

2017-01-04 22:38:42 2058 3

转载 JVM系列:JVM参数设置、分析

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同

2017-01-03 21:54:25 456

原创 关于防止微信投票刷票行为的一些思考

背景介绍微信投票在这几年一直很热门,只要是个活动往往都做一个投票的功能。刷票已形成了一个庞大的产业链但如何防止刷票行为就很让人头疼了。首先要清楚微信的刷票行为,微信投票是根据openid来判断一个用户是否已投过票。 openid是加密后的微信号,每个用户对每个公众号的openid是唯一的。这个判断依据有较大的漏洞,就是只能判断openid是否重复,但无法校验openid是不是真实的。而且就算o

2016-12-29 13:58:57 14922

原创 将List转成树的两种方式(递归、循环)

在做目录树的时候通常是将一个目录存在数据库的List全部返回来,再根据节点id和parentId组装成一颗树,这里切忌使用递归查询的方式实现。List转成Tree有两种方式,一种是常用的递归,一种是双层循环。TreeNode.javapackage org.massive.tree;import java.util.List;/** * Created by Massiv

2016-12-28 18:37:37 42947 24

原创 使用Zookeeper实现Leader(Master)选举

分布式系统最典型的架构就是一主多从。在很多时候,虽然处理大规模的数据、图像和文件等,这种工作极其耗资源而且数据、文件等都是共享的,若全部机器都计算处理一次会浪费保贵的计算资源;我们可以把这些工作交给一台机器处理,其它机器则通过数据库、分布式文件系统等方式共享计算成果Leader(Master)。另外,对于数据库、缓存等组件读写分离是惯用的提高性能的方式;读写分离是把写全部给leader(master),查询则使用follower的机器。使用Zookeeper提供的API可轻松实现leader选举。

2016-12-28 00:28:12 6748

原创 使用ZooKeeper实现队列

实现原理先进先出队列是最常用的队列,使用Zookeeper实现先进先出队列就是在特定的目录下创建PERSISTENT_SEQUENTIAL节点,创建成功时通知等待的队列,队列消费序列号最小的节点。此场景下Zookeeper的znode用于消息存储,znode存储的数据就是消息队列中的消息内容,SEQUENTIAL序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必

2016-12-26 09:27:37 6136

原创 使用Zookeeper实现分布式锁

实现原理Zookeeper的一个典型应用场景就是分布式锁,锁的实现是利用Zookeeper创建的临时时序节点(创建的时候CreateMode为EPHEMERAL_SEQUENTIAL)和节点变动的监听器实现的。时序节点保证了节点的创建在分布式系统情况下还是有先后顺序的,监听器使得客户端能感受到节点的变动情况。具体步骤1、创建一个永久性节点,作锁的根目

2016-12-21 00:16:18 4030 4

原创 Zookeeper Java API的使用

本文介绍Zookeeper Java API的使用引入相应Jar包bulidPath解压下载的zookeeper-3.4.9.tar.gz的根目录就有相应jarzookeeper-3.4.9.jar在eclipse的buildPath里引入zookeeper-3.4.9.jarmaven构建的项目 若是maven构建的项目,加入以下依赖depend

2016-12-19 19:00:52 7463

原创 Zookeeper集群配置

本文主要介绍Zookeeper集群的配置和运行启动Zookeeper的单机模式是非常简单的,它在用作开发、测试和评估时间很方便。然而在生产环境下,为了保障服务的高可用性应该要使用集群模式。有关Zookeeper的简介和单机模式示例请参考: Zookeeper简介和入门示例在集群模式下,所有配置文件和单机相比是基本相同的,只有一点细微的差别。本文的运行环境OS: CentOS 7Zookeeper

2016-12-12 21:23:34 610

原创 Zookeeper简介和入门安装示例

Zookeeper简介Zookeeper是一个为分布式应用提供协同服务的组件。它提供了一系列简便的功能给分布式系统实现更高等级的同步、配置管理、分组及命名。它设计的非常容易开发,使用了一种跟树形文件系统非常相似的数据模型。 Zookeeper使用Java的运行环境,能使用Java和C进行操作。设计目标Zookeeper是非常简单的。Zookeeper通过一种可共享的继承式的命名空间让分布式程序之间相

2016-12-11 15:47:43 1090

原创 使用maven的profile切换项目各环境的参数

在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发、测试、正式。各个环境之间的参数各不相同,比如mysql、redis等不同环境的host不一样,若每个环境都手动替换环境很容易出错,这里我们利用maven的profile功能切换环境。本文的项目结构图:src/main/resources/dev  目录的properties是开发环境的配置项目

2016-12-07 22:29:26 25321 1

原创 使用Spring AOP注解实现Redis缓存 适合复杂业务场合

支持切入方法参数为Map、Javabean、基本类型(要定义成对象),也增加了一些时间参数和缓存配置项。为了灵活配置拦截的方法,aop使用xml配置

2016-12-07 15:52:34 5399 2

原创 MyBatis查询返回Map时设置值为null的字段也在结果集中

使用Mybatis的查询,很多时候都要返回Map,Mybatis默认若field的值为null时候不返回字段的名称,导致结果集map没有对应的key。然而很多时候为了前端的使用方便还是要返回字段的key。若MyBatis一个查询的如下 select id,user_name,user_code from customer where id = #{id}当查

2016-11-07 11:16:57 12250

原创 Linux下mysql自动备份压缩

本文要实现的内容 1、自动备份mysql指定的数据库 2、压缩备份的数据库 3、删除旧有的备份(7天前)本次配置的环境目录如下:mysql安装目录: /usr/local/mysqlmysql备份目录: /app/deploy/backup/mysqlmysql配置文件: /etc/my.cnf备份shell文件: /usr/local/bin/mysql-d

2016-09-06 10:45:54 3366

原创 ssh免密码登陆Linux

现需设置 主机A 免密码登陆 主机B主机A: 192.168.0.61主机B: 192.168.0.62 1、在主机A中生成公钥和私钥cd /~/.sshssh-keygen -t rsa主机A的提示如下,在要求输入密码(Enter passphrase)的提示中按回车即为空密码Generating public/private rsa key pair.Enter fi

2016-08-16 14:20:48 490

原创 Linux下卸载keepalived

进入keepalived的源码包cd /usr/local/src/keepalived #源码所在目录(根据实际情况进入对应目录)执行卸载程序make uninstall删除相关文件rm -f /usr/local/sbin/keepalived rm -f /usr/local/etc/rc.d/init.d/keepalivedrm -f /usr/local/etc/sysco

2016-01-30 11:49:17 9224

原创 使用keepalived来实现nginx的高可用

本次配置的环境如下Linux: centos7.0virtual ip: 192.168.30.50master: 192.168.30.61backup: 192.168.30.62 1、下载keepalivedcd /usr/local/srcwget http://keepalived.org/software/keepalived-1.2.19.ta

2016-01-30 11:42:46 1631

原创 linux系统tomcat自启动及业务脚本

网上有很多类似的脚本,我结合自身业务作了一个整合,增加了状态、查看日志等常用命令创建脚本并增加执行的权限touch /etc/init.d/tomcatchmod +x /etc/init.d/tomcatchmod 755 /etc/init.d/tomcat编辑脚本vi /etc/init.d/tomcat,加入以下内容#!/bin/bash # /etc/rc.d/init.d/tomc

2016-01-20 14:18:06 910

转载 使用AOP 实现Redis缓存注解,支持SPEL(转)

源文链接:http://www.cnblogs.com/DajiangDev/p/3770894.html原来想自己实现一个,看到网上有一个和自己思路一样的实现,经试验,完美运行,感谢原作者的分享精神。1.applicationContext.xml,配置JedisPool

2016-01-20 13:45:31 2499

原创 使用nexus构建maven私服

现在用maven构建的项目越来越多,部署一个私有的仓库拥有较大的价值:1、方便项目组的人员之间共享类库2、maven的jar包版本管理能更好地管理jar包3、减少对中央仓库的依赖。当下载一个snapshot或release时,maven查找的顺序为 本地仓库-->私服仓库-->中央仓库。部署私有仓库后,每当访问私有仓库查找时,若不存在,私有仓库即会从中央仓库下载,以

2016-01-20 10:55:00 1232

转载 Linux 查看CPU信息,机器型号,内存等信息

这些命令非常有用,但是使用度不算太高,收藏起来以便用到时候备查。转载连接:http://my.oschina.net/hunterli/blog/140783系统# uname -a # 查看内核/操作系统/CPU信息# lsb_release -a # 查看操作系统版本 (适用于所有的linux,包括Redhat、

2016-01-16 13:59:10 610

原创 设置tomcat集群使用redis实现分布式session

1、把以下jar放进tomcat的lib目录commons-pool2-2.2.jarjedis-2.5.2.jartomcat-redis-session-manage-tomcat7.jar2、编辑conf目录的context.xml,加入以下内容 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessio

2016-01-14 16:53:20 1420

原创 redis安装与配置笔记

1、获取redis安装包cd /usr/local/src wget http://download.redis.io/releases/redis-3.0.6.tar.gz2、安装tar -zxvf redis-3.0.6.tar.gzcd redis-3.0.6mkdir -p /usr/local/redis //创建redis程序所在目录make PREFIX=/usr/local

2016-01-14 14:51:09 524

原创 设置mysql的主从复制

本文章主要参考了mysql 官方的replication文档 http://dev.mysql.com/doc/refman/5.7/en/replication-configuration.html 本文章实验的两个机器的系统版本:CentOS Linux release 7.1.1503 (Core)两台机器的ip分别是:

2015-12-27 21:36:29 478

原创 Linux下mysql安装笔记

该文章主要参考了mysql的官方二进制方式安装文档: http://dev.mysql.com/doc/refman/5.7/en/binary-installation.html1、前往mysql官方网站 http://dev.mysql.com/downloads/mysql/选择版本为Linux - Generic (glibc 2.5) (x86, 64-bit), TAR注:

2015-12-27 18:25:41 548

原创 Linux下nginx安装笔记

本文介绍的nginx的简单安装步骤1、由于是以源码方式安装nginx的,所以先要安装gcc和gcc++的编译器能连上网的童鞋尽量用以下两条高大上的命令安装yum install gccyum install gcc++2、进入linux下惯用的存放源代码的目录:/usr/local/srccd /usr/local/src3、下载nginxwget...

2015-11-10 15:52:22 1033

redis-tomcat-session-manager.

1、请把3个jar包放在tomcat的lib目录 2、把context.xml覆盖tomcat/conf原有的文件 3、修改context.xml的ip、port和密码

2016-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除