
Java
文章平均质量分 70
点火三周
热爱编程,老码团队成员,《老码说编程之玩转Swift江湖》作者。elasitcsearch认证工程师,elasitcsearch中文社区成都负责人
展开
-
如何将liquibase部署到tomcat服务器上(使用postgresql数据库)
如何将liquibase部署到tomcat服务器上(使用postgresql数据库)Liquidbase作为一个数据库的自动更新软件,可以更好的在不同的工作者之间同步数据库的变化。在这里,以postgresql和tomcat作为例子,展示如何如何将liquibase部署到服务器上如何将liquibase部署到tomcat服务器上使用postgresql数据库安装tomcat postgresql原创 2015-11-11 14:09:56 · 9744 阅读 · 1 评论 -
httpclient和异步httpclient
本文偏重使用,简单讲述httpclient,其实在网络编程中,基于Java的实现几乎都是包装了socket的通信,然后来模拟各种各样的协议;httpclient其实就是模拟浏览器发起想服务器端的请求,而这种更加类似于JS的请求或页面的POST、GET,不过这种数据的返回一般需要得到有意义的数据,才方便做其他的交互,否则得到一个页面结果,全是标签了,毕竟不是浏览器,所以我们用httpclient更多转载 2016-08-11 13:35:41 · 14291 阅读 · 0 评论 -
SocketInputStream.socketRead0 导致线程hangs的解决方案
SocketInputStream.socketRead0需要通过Connection eviction policy去监控。不仅要设置timeout,还需要close掉已经expire的connection原创 2016-08-10 14:42:04 · 22515 阅读 · 0 评论 -
在没有源码的情况下修改.class文件
修改.class文件没有原工程原创 2016-08-25 12:25:27 · 13342 阅读 · 0 评论 -
J2EE程序中如何正确的管理自己的custom线程
在这里,我们要讨论的话题包含了一个明确的前提,在J2EE程序使用线程。必须说明的是,在我们学习如何编写J2EE程序的时候,就被明确告知了,不允许在J2EE程序中自己创建和管理线程。具体可以参见http://www.oracle.com/technetwork/java/restrictions-142267.html。为何不能在J2EE程序中创建线程Container control. The co原创 2016-09-26 16:05:41 · 1184 阅读 · 0 评论 -
EJB的约束
以下是你应该回避使用的一些Java特色,并且在你的EJB组件的实现代码中要严格限制它们的使用: 1.使用static,非final 字段。建议你在EJB组件中把所有的static字段都声明为final型的。这样可以保证前后一致的运行期语义,使得EJB容器有可以在多个Java虚拟机之间分发组件实例的灵活性。 2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,你就可以使EJB容器灵活的在多个Ja翻译 2016-09-26 16:12:59 · 1010 阅读 · 0 评论 -
实现AOP的两种Proxy
JDKProxy:如果是面向接口的动态代理的实现,即JDKProxy,其代理对象必须是某个接口的实现,使用java.lang.reflect.Proxy类根据一个被代理对象产生一个代理对象userDAOProxy,通过Proxy类的调用静态方法newProxyInstance,根据要实现的接口来产生(这里为UserDao接口)(也就是说接口里面有哪些方法,我生成的代理里面就有哪些方法);以及实现ja原创 2016-12-12 14:32:12 · 1230 阅读 · 0 评论 -
Spring AOP 实现原理
AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,转载 2016-12-12 12:48:22 · 1212 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
原文地址:https://my.oschina.net/feichexia/blog/196575 现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高...... 这些问题在日常开发中可能被很多人忽视转载 2016-12-29 16:50:38 · 1800 阅读 · 0 评论 -
Java GC日志查看
Java GC类型Java中的GC有哪几种类型? 参数描述UseSerialGC虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。UseParNewGC打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃转载 2016-12-20 15:46:01 · 21617 阅读 · 0 评论 -
深入解释Java7中运行UT的OutOfMemoryError: PermGen space
一组UT代码,在经过一段时间的修改和膨胀之后,“突然”某一天在运行的时候抛出了OutOfMemoryError: PermGen space异常,导致无法运行,你想想不到用了Mockito或PowerMock之后内存开销会有多大原创 2017-03-23 17:59:30 · 2328 阅读 · 1 评论 -
Spring @Schedule Annotation详解
1. Overview这篇文章中我们将讨论Spring的@Scheduled annotation,并且,将展示如何用它来配置一个定时任务。要使用@Scheduled annotation有两条基本的原则:a method should have void return typea method should not accept any parameters2.原创 2017-05-05 08:58:14 · 6339 阅读 · 1 评论 -
elastic APM针对java应用的高阶用法 二(java agent)
文章目录异常监测日志分析系统的配合这篇文章是接着上一篇elastic APM针对java应用的高阶用法(java agent)剩余的内容,异常监测和与日志分析系统的配合。异常监测接着上一篇文章中的内容,我们将异步函数里面进行redis连接的网络环境切换一下(把redis服务器给关了)。这时,jedis会抛出一个SocketTimeoutException异常。打开APM,看看这个异常是否能够...原创 2019-02-22 08:31:22 · 4689 阅读 · 1 评论 -
Spring cloud 之ribbon与eureka – 发生在客户端的负载均衡
之前一直在做一些针对APM的深入测试,其中就涉及到了对分布式为服务系统的分布式追踪的测试。所以,有必要了解一下现在比较流行的微服务框架,并进行一些实地测试,之前转了一篇文章:Dubbo和Spring Cloud微服务架构的比较,已经让我们对dubbo和spring cloud有了一定的了解。因为elastic APM目前只能对基于HTTP的API进行追踪,因此对于dubbo这种基于自有协议进行RP...原创 2019-02-17 18:24:30 · 4050 阅读 · 0 评论 -
elastic APM 深入测试 二 基于spring cloud微服务框架的分布式追踪
文章目录测试的基本架构技术栈测试框架逻辑拓扑微服务应用的搭建搭建Eureka注册服务器Eureka服务器配置创建provider service创建 rest endpoint创建consumerFeign配置使用apm java agent进行探测测试启动流程测试分布式追踪微服务架构现在已经是各个互联网应用的标配,并且开始作为一个技术框架的基本要求,慢慢扩展到其他行业,比如金融,保险等面向大量...原创 2019-02-18 16:44:35 · 4627 阅读 · 0 评论 -
Dubbo和Spring Cloud微服务架构的比较
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如Dubbo和Spring Cloud。各大互联网公司也有自研的微服务框架,但其模式都于这二者相差不大。微服务主要的优势如下:1...转载 2019-02-13 17:27:25 · 1638 阅读 · 0 评论 -
如何Troubleshooting当Java Application发生死锁或Hangs
前言作为一个Java开发人员,特别是资深的Java开发人员(其实只要是一个软件工程师),你一定会遇到过app挂起的问题,在英文里,挂起叫做Hangs。前一天你的软件还运行的好好的,突然就没有任何响应,无论是log file还是stand output都没有任何响应。上司或者客户给的压力让你的心焦黑。在不知道是什么问题的情况下,重启一下应用服务器,发现问题突然解决了。但没过几天,又像幽灵一样死亡缠绕。原创 2016-08-09 16:13:11 · 1282 阅读 · 0 评论 -
JPA2.1 中三个提升应用性能的新功能
经常在网上看到开发者们抱怨 JPA 性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个:使用过多的 SQL 查询从数据库中获取所需的实体信息,即我们常说的n+1查询问题逐个更新实体,而不是使用单条语句进行更新使用 Java 应用程序而非数据库进行大量数据处理JPA提供了处理这类问题的方法,并给 J翻译 2016-08-16 22:03:09 · 1843 阅读 · 1 评论 -
Hibernate中OneToOne延时加载的问题-解决方案
在上一篇文章中我们已经解释了延迟加载的问题。那我们该如何解决? 我觉得该分两个方面来讨论。 如果这是一个新的项目,在发布之前我们有足够的时间来修改数据的映射和关联关系、以及已经存在的sql语句,或者我们可以更改客户的数据库,并且不存在复杂的数据关系,可以做数据更新。那么我们可以通过修改两端的关联关系来解决这个问题。 但如果这是一个老的项目,已经发布,并且客户那里有大量的数据,那么建议是通过增加原创 2016-08-16 14:47:35 · 1574 阅读 · 0 评论 -
Stub和Mock的区别
相同点:Stub和Mock对象都是用来模拟外部依赖,使我们能控制。不同点:而stub完全是模拟一个外部依赖,用来提供测试时所需要的测试数据。而mock对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。在mocking框架中mock对象可以同时作为stub和mock对象使用,两者并没有严格区别。 更多信息:http://martinfowler.com/artic转载 2015-11-30 17:48:47 · 11701 阅读 · 0 评论 -
如何远程debug部署到widefly/JBoss服务器上的J2EE程序
一般来说,当我们的J2EE软件最终部署到服务器之后,就会和我们的本地开发环境有很大的不同:服务器上的widefly或Jboss一般都是运行在JRE上,而不是本地开发环境的JDK服务器上的widefly或Jboss都是运行的domain mode而不是本地开发环境的standalone mode因此,当你的J2EE程序在服务器上出现很难在本地复现的问题时,我们是很需要在一个远程调原创 2016-05-25 16:30:31 · 10853 阅读 · 0 评论 -
设置log4j和logback,用不同的颜色显示不同的log level
经常debug java程序的朋友都知道,如果Log没有显著的颜色标记哪里是warning,哪里是error,一堆白花花的打印总会让人觉得觉得压抑。如果你在用logback或log4j,又想让你的Log输出带上色彩,如下图:logback: true [%thread] %highlight(%-5level) %cyan(%logger{15})原创 2016-05-25 16:43:25 · 30330 阅读 · 3 评论 -
如何用HotSwapAgent和DCEVM让java开发像js开发一样高效(JRebel的替代方案)
要高效的开发Java代码,那就必须要让java像js一样,修改过的代码可以实时的反应出来。要了解如何做到这一点,我们先要知道JVM是如何工作的:我们知道,JAVA程序都是运行在java虚拟机上面(当然JVM有两种类型,JDK和单纯的JRE,这里我们主要是指的JDK,因为只有JDK包含了debug功能,而我们只有在debug端口打开的情况下才能实现run time class load)原创 2016-05-25 17:41:25 · 15493 阅读 · 3 评论 -
如何为Tomcat服务器上的多个app配置公共的logback.xml
当你司在tomcat服务器上部署了多个app,又想为这多个app采用统一的log配置方案,通用的solution一般是(这里以logback为例):配置一个公共的log property或xml文件,比方说采用了logback, 我们会有一个myLogback.xml将该配置文件放于tomcat的一个common目录,比如your_tomcat/conf在每个app的web.xml中指定log原创 2016-05-26 17:04:31 · 12277 阅读 · 0 评论 -
Intellij IDEA最全的热键表(default keymap)
EditingCtrl + Space Basic code completion (the name of any class, method or variable) Ctrl + Shift + Space Smart code completion (filters the list of methods and variables by expected type) Ctrl原创 2016-05-27 09:46:15 · 25019 阅读 · 1 评论 -
JAVA wait(), notify(),sleep详解(转)
在JAVA中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchroni转载 2016-05-29 22:15:06 · 9843 阅读 · 0 评论 -
java开发人员必去的知名国外网站
1.[http://www.javaalmanac.com] – Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处. 2.[http://www.onjava.com] – O’Reilly的Java网站. 每周都有新文章. 3.[http://java.sun.com] – 官方的Java开发者网站 – 每周都有新文章发表. 4.[htt转载 2016-05-31 09:33:14 · 12828 阅读 · 0 评论 -
如何用maven运行特定的test case
最近碰到了一些特殊的问题,有些test case在IDE里面运行是可以pass的,但通过Maven运行就一定会出问题。这里不深入讨论,这类测试一般都是和entity manager有关的。今天记录一下在这过程中,maven的一些测试特性:如何用Maven运行特定的test case。运行一个单独的test在开发过程中,你有可能需要重复的单独运行一个test class。要用mavan做到这个,需要把原创 2016-06-07 13:33:36 · 29382 阅读 · 0 评论 -
实战记录:从EclipseLink迁移到Hibernate上(2)调试错误
尝试去运行我们的代码,你会发现各种形形色色的问题:@Id一上来就不能persisntence,先看看问题,column: id (should be mapped with insert=”false” update=”false”)Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: co原创 2016-06-03 18:00:25 · 6435 阅读 · 0 评论 -
Jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能。但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新生成。比如说,你有一个ear包已经部署到客户的服务器上,运行了有那么久了,版本也很老,但一个让你头痛的bug需要立即在客户那里fix,这个ear包很大,并且客户的网络很慢,你也没有那么老的整套代码,但是原创 2016-06-14 11:21:46 · 13942 阅读 · 0 评论 -
web service开发时,wsdl2java 客户端代码的生成
在用到web service时,如果是调用自己开发的web service还好,可以有一个方法的接口或参数对象实体类什么的,但如果是调用第三方的服务,除了得到web service服务地址的wsdl文档外,没有任何实质性编码的东西,写原生调用太麻烦,这时就需要自己写一个方法的接口类。这个,目前已经有比较成熟的工具,可以自动生成,下面作一下简单的介绍。 apache的wsdl转载 2016-06-15 09:32:43 · 2028 阅读 · 0 评论 -
用IntelliJ自动检查并生成serialVersionUID
网上这样的教程很多了,打算再写一篇这样的博客是因为有些东西还是可以更详细一些。不同的地方体现在检查上面。设置先打开Intellij的settings. 在Inspections(检查)中把Serializable class without ’serialVersionUID’勾上: Setting->Inspections->Serialization issues->Serializable原创 2016-07-25 12:56:17 · 5260 阅读 · 0 评论 -
Hibernate 延迟加载剖析与代理模式应用
Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术。这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录。通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销。Hibernate 的延迟加载本质上就是代理模式的应用,当程序通过 Hibernate 装载一个实体时,默认情况下,Hibernate 并不会立即抓取它的集合属性、关联实体所以对转载 2016-08-15 16:56:28 · 1175 阅读 · 0 评论 -
Hibernate中OneToOne延时加载的问题-现象和原因
关于OneToOne的延迟加载(fetch = FetchType.LAZY),我觉得是非常需要注意的一个问题。它不只是存在于Hibernate中,其他的ORM persistence framekwork也有同样的问题,至少我用过的eclipseLink也是一样的。这个问题之所以重要,是因为它在背后偷偷的降低了查询数据库的效率,但又极难发现,特别是当你进入一个老项目,发现软件的运行效率极低时,你就原创 2016-08-16 13:57:11 · 3617 阅读 · 1 评论 -
elastic APM针对java应用的高阶用法(java agent)
文章目录事件(event)SQL的监控栗子1,看不到的多个SQL栗子2,batch SQL手动添加跨度redis的监控schedule的监控异常监控与日志分析系统的配合elastic APM还在不停的迭代当中。相对于其他的APM工具,我觉得如果有elastic APM有几个优势:背后是elasticsearch集群,可承载PB级数据,并且大部分的企业都会部署es集群,技术和资源共享elas...原创 2019-02-20 11:33:36 · 12414 阅读 · 1 评论