
java
文章平均质量分 90
MassiveStars
这个作者很懒,什么都没留下…
展开
-
从JVM的退出机制分析Java程序的优雅关闭退出
JVM的退出可以分正常退出、异常退出和强制退出,每种退出方法的不同会产生不过的情况,汇总如下:Linux操作系统关闭不完全支持优雅退出,原因是Linux关闭时先会向进程发送SIGTERM信号,等待一段时间进程还没退出时就会强制关闭进程,所以Linux只会给一定时间让进程关闭退出。JVM可通过以下几种方式正常退出最后一个非守护线程结束。JVM被中断(通过ctrl + c或发送SIGINT信号)。JVM被终止(通过发送SIGTERM信号,即或kill PID某个线程调用或。当。原创 2024-03-18 00:03:27 · 2299 阅读 · 2 评论 -
Java计划线程池ScheduledThreadPoolExecutor运行流程和源码分析
继承自线程池,并在其基础上增加了按时间调度执行任务的功能,如果对Java线程池ThreadPoolExecutor运行机制和源码解析。首先来翻译一下这个类的前面的单词scheduled: 预先安排的,按时刻表的;定期的。那么ScheduledThreadPoolExecutor可翻译为计划线程池、定时线程池。大多数时候,线程池已经使用了池化技术很好的满足了线程的重复使用需要,为什么还要另外搞一个ScheduledThreadPoolExecutor呢?无法设置任务在指定时间点执行。原创 2024-02-26 22:42:21 · 1103 阅读 · 0 评论 -
Spring事务注解@Transactional的流程和源码分析
在事务处理中事务的定义类TransactionDefinition有很多衍生类和接口,它们的属性从事务注解@Transactional解析而来,在原码里名称为txAttr,关系如下:其中DelegatingTransactionAttribute的类图:图上那一系列类和接口,虽然比较绕,但都是和事务的定义有关。原创 2024-03-07 22:01:58 · 2648 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor运行机制和源码解析
线程的每次创建和销毁都会产生的一定的系统资源和时间的开销。正如几乎所有重资源都使用池化技术(数据库连接池、redis连接池等)进行管理,线程作为操作系统宝贵的资源,对它的使用需要进行控制管理,线程池就是使用了池化的技术对线程进行复用和管理。快速响应用户请求线程的启动需要一定时间开销,而使用了池化的线程时,当任务到达,节省了这部分的时间。Tomcat就使用自行扩展的ThreadPoolExecutor处理http请求,减小响应时间。减少资源开销。原创 2024-02-20 19:52:38 · 921 阅读 · 0 评论 -
使用Spring和Atomikos集成JTA分布式事务
分布式事务分布式事务是指事务位于不同的分布式系统的不同节点之上。目的是保证分布式系统事务的原子性和一致性。XA规范是由X/Open DTP提出的分布式事务规范。XA规范包含四大角色:应用程序( AP )事务管理器( TM )资源管理器( RM )通信资源管理器( CRM )常见的事务 管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息原创 2017-01-04 22:38:42 · 2136 阅读 · 3 评论 -
使用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 · 2344 阅读 · 1 评论 -
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 · 5213 阅读 · 0 评论 -
Docker实践 - 安装Docker并在容器里运行tomcat
随着微服务的流行,Docker越来越流行,正如它的理念”Build, Ship, and Run Any App, Anywhere”一样,Docker提供的容器隔离技术使得开发人员不用再去理清server里的各种环境配置,轻松把应用运行起来。我们只需把运行环境的配置和应用封装在Docker的镜像(image),然后使用Docker运行这个镜像即可。Docker可以说是给所有开发人员的一个福利包,学原创 2017-01-11 22:58:39 · 37487 阅读 · 7 评论 -
使用Spring AOP注解实现Redis缓存 适合复杂业务场合
支持切入方法参数为Map、Javabean、基本类型(要定义成对象),也增加了一些时间参数和缓存配置项。为了灵活配置拦截的方法,aop使用xml配置原创 2016-12-07 15:52:34 · 5774 阅读 · 2 评论 -
ThreadLocal的源码分析和理解
ThreadLocal的字面意思就是线程的本地变量,也就是说线程的局部变量。ThreadLocal在每个线程中都有自己的副本,亦即一个线程一份数据,相互之间不影响。 ThreadLocal提供get和set访问方法,使用get时总是返回set方法的最新值。ThreadLocal一个典型的应用就是减少一个线程内的参数传递,如数据库连接JDBCConnection或用户的Session,避免每个方法...原创 2018-03-18 16:51:12 · 1251 阅读 · 1 评论 -
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 · 7030 阅读 · 2 评论 -
Spring Cloud Netflix Eureka组件服务注册及发现源码浅析
Spring Cloud简介微服务这个概念已经深入人心,是最近几年的最热门技术话题之一,Spring Cloud是最流行的开源微服务框架。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发, 如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署...原创 2018-03-28 23:00:18 · 3074 阅读 · 0 评论 -
设置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 · 1502 阅读 · 0 评论 -
Zookeeper集群配置
本文主要介绍Zookeeper集群的配置和运行启动Zookeeper的单机模式是非常简单的,它在用作开发、测试和评估时间很方便。然而在生产环境下,为了保障服务的高可用性应该要使用集群模式。有关Zookeeper的简介和单机模式示例请参考: Zookeeper简介和入门示例在集群模式下,所有配置文件和单机相比是基本相同的,只有一点细微的差别。本文的运行环境OS: CentOS 7Zookeeper原创 2016-12-12 21:23:34 · 658 阅读 · 0 评论 -
Zookeeper简介和入门安装示例
Zookeeper简介Zookeeper是一个为分布式应用提供协同服务的组件。它提供了一系列简便的功能给分布式系统实现更高等级的同步、配置管理、分组及命名。它设计的非常容易开发,使用了一种跟树形文件系统非常相似的数据模型。 Zookeeper使用Java的运行环境,能使用Java和C进行操作。设计目标Zookeeper是非常简单的。Zookeeper通过一种可共享的继承式的命名空间让分布式程序之间相原创 2016-12-11 15:47:43 · 1180 阅读 · 0 评论 -
使用maven的profile切换项目各环境的参数
在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发、测试、正式。各个环境之间的参数各不相同,比如mysql、redis等不同环境的host不一样,若每个环境都手动替换环境很容易出错,这里我们利用maven的profile功能切换环境。本文的项目结构图:src/main/resources/dev 目录的properties是开发环境的配置项目原创 2016-12-07 22:29:26 · 25560 阅读 · 1 评论 -
使用nexus构建maven私服
现在用maven构建的项目越来越多,部署一个私有的仓库拥有较大的价值:1、方便项目组的人员之间共享类库2、maven的jar包版本管理能更好地管理jar包3、减少对中央仓库的依赖。当下载一个snapshot或release时,maven查找的顺序为 本地仓库-->私服仓库-->中央仓库。部署私有仓库后,每当访问私有仓库查找时,若不存在,私有仓库即会从中央仓库下载,以原创 2016-01-20 10:55:00 · 1295 阅读 · 0 评论 -
使用Zookeeper实现分布式锁
实现原理Zookeeper的一个典型应用场景就是分布式锁,锁的实现是利用Zookeeper创建的临时时序节点(创建的时候CreateMode为EPHEMERAL_SEQUENTIAL)和节点变动的监听器实现的。时序节点保证了节点的创建在分布式系统情况下还是有先后顺序的,监听器使得客户端能感受到节点的变动情况。具体步骤1、创建一个永久性节点,作锁的根目原创 2016-12-21 00:16:18 · 4126 阅读 · 4 评论 -
使用ZooKeeper实现队列
实现原理先进先出队列是最常用的队列,使用Zookeeper实现先进先出队列就是在特定的目录下创建PERSISTENT_SEQUENTIAL节点,创建成功时通知等待的队列,队列消费序列号最小的节点。此场景下Zookeeper的znode用于消息存储,znode存储的数据就是消息队列中的消息内容,SEQUENTIAL序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必原创 2016-12-26 09:27:37 · 6253 阅读 · 0 评论 -
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 · 12655 阅读 · 0 评论 -
使用Zookeeper实现Leader(Master)选举
分布式系统最典型的架构就是一主多从。在很多时候,虽然处理大规模的数据、图像和文件等,这种工作极其耗资源而且数据、文件等都是共享的,若全部机器都计算处理一次会浪费保贵的计算资源;我们可以把这些工作交给一台机器处理,其它机器则通过数据库、分布式文件系统等方式共享计算成果Leader(Master)。另外,对于数据库、缓存等组件读写分离是惯用的提高性能的方式;读写分离是把写全部给leader(master),查询则使用follower的机器。使用Zookeeper提供的API可轻松实现leader选举。原创 2016-12-28 00:28:12 · 6989 阅读 · 0 评论 -
将List转成树的两种方式(递归、循环)
在做目录树的时候通常是将一个目录存在数据库的List全部返回来,再根据节点id和parentId组装成一颗树,这里切忌使用递归查询的方式实现。List转成Tree有两种方式,一种是常用的递归,一种是双层循环。TreeNode.javapackage org.massive.tree;import java.util.List;/** * Created by Massiv原创 2016-12-28 18:37:37 · 43971 阅读 · 24 评论 -
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 · 7541 阅读 · 0 评论 -
使用AOP 实现Redis缓存注解,支持SPEL(转)
源文链接:http://www.cnblogs.com/DajiangDev/p/3770894.html原来想自己实现一个,看到网上有一个和自己思路一样的实现,经试验,完美运行,感谢原作者的分享精神。1.applicationContext.xml,配置JedisPool转载 2016-01-20 13:45:31 · 2583 阅读 · 0 评论