druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索

  最近项目中有个定时任务的需求,定时检查mysql数据与etcd数据的一致性,具体实现细节就不说了,今天要说的就是实现过程中遇到了druid抛出的异常,以及解决的过程  路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  详细信息五月05,20174:16:00下午com.alibaba.druid.proxy.DruidDriverwarn警告:registerdruid-drivermbeanerrorjavax.management.InstanceAlreadyExistsException:com.alibaba.druid:type=DruidDriveratcom.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)atcom.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithReposito...

cassandra高级操作之分页的java实现(有项目具体需求)

  接着上篇博客,我们来谈谈java操作cassandra分页,需要注意的是这个分页与我们平时所做的页面分页是不同的,具体有啥不同,大家耐着性子往下看。  上篇博客讲到了cassandra的分页,相信大家会有所注意:下一次的查询依赖上一次的查询(上一次查询的最后一条记录的全部主键),不像mysql那样灵活,所以只能实现上一页、下一页这样的功能,不能实现第多少页那样的功能(硬要实现的话性能就太低了)。  我们先看看驱动官方给的分页做法  如果一个查询得到的记录数太大,一次性返回回来,那么效率非常低,并且很有可能造成内存溢出,使得整个应用都奔溃。所以了,驱动对结果集进行了分页,并返回适当的某一页的数据。  路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  抓取大小指的是一次从cassandra获取到的记录数,换句话说,就是每一页的记录数;我们能够在创建cluster实例的时候给它的fetchsize指定一个默认值,如果没有指定,那么默认是5000//...

Cassandra-java操作——基本操作

  接着上篇博客,我们来谈谈java操作cassandra;上篇博客的环境:jdk1.7+python2.7.10+cassandra2.2.8;由于2.2.8没有对应的驱动文档,那么我们就用3.0的驱动文档,而驱动则用2.1.10.3版本;  驱动文档:http://docs.datastax.com/en/developer/java-driver/3.0/manual/  路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  老规矩,创建maven工程,让maven来维护我们的jar,maven最重要的pom文件内容如下:<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http:/...

Java 14 开箱,它真香香香香

Java14已经发布有一周时间了,我准备来开个箱,和小伙伴们一起来看看新特性里面都有哪些好玩的。我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。先来看看Java14都有哪些新特性吧!红色线划出来的是我比较感兴趣的,其余的对我没什么太大的吸引力,就暂且略过。01、下载JDK14要想开箱,得先下载JDK14,不然拿什么开箱呢,对吧?有2处地方可供下载,Oracle上可以下载商用版,jdk.java.net上可以下载开源版。我们就选择后者吧。我目前用的是Windows操作系统,所以就选择Windows版的zip包进行下载,完成后记得解压。02、升级IntelliJIDEA需要把IDEA升级到抢先体验版2020.1EAP,否则无法支持Java14的新特性。社区版的下载地址如下所示:[https://www.jetbrains.com/idea/nextversion/#section=windows](https://www.jetbrains.com/idea/nextversion/#section=windows)安装的时候可以把之前的版本卸载,也可以选择保留。完成...

Java 8 Optional 良心指南,建议收藏

想学习,永远都不晚,尤其是针对Java8里面的好东西,Optional就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案。作为一名Java程序员,我真的是烦透了NullPointerException(NPE),尽管和它熟得就像一位老朋友,知道它也是迫不得已——程序正在使用一个对象却发现这个对象的值为null,于是Java虚拟机就怒发冲冠地把它抛了出来当做替罪羊。当然了,我们程序员是富有责任心的,不会坐视不管,于是就有了大量的null值检查。尽管有时候这种检查完全没有必要,但我们已经习惯了例行公事。终于,Java8看不下去了,就引入了Optional,以便我们编写的代码不再那么刻薄呆板。01、没有Optional会有什么问题我们来模拟一个实际的应用场景。小王第一天上班,领导老马就给他安排了一个任务,要他从数据库中根据会员ID拉取一个会员的姓名,然后将姓名打印到控制台。虽然是新来的,但这个任务难不倒小王,于是他花了10分钟写下了这段代码:public class WithoutOptionalDemo {   ...

想要成为一名优秀的Java程序员,你需要这8个锦囊

私底下,隔三差五就有读者问我:“二哥,怎么样才能像你一样,成为一名优秀的Java开发者呢?”假如把“怎么才能像你一样”去掉的话,这个问题就是一个好问题,否则的话,总有点彩虹屁的嫌疑。但话说回来,我喜欢这种提问的艺术。从上大学那会学Java到现在,我已经积攒了10多年的编程经验,虽然离优秀还有很长的距离,但总归是可以分享一些心得给你,这对你来说,算不上至关重要,但多少是有点用的,至少在我看来。01、学习Java8如果我没记错的话,已经Java14了。但很遗憾的是,我的IDE中配置的JDK版本还停留在Java13,还有一个备用版本,就是Java8。之所以没有追赶时髦,可能是因为学习的劲头不像年轻时候那么足了,让我先惭愧一会儿。还有一个客观上的原因,就是Java8的新特性实在是开天辟地、空前绝后。像Lambda表达式,Stream流,可以称得上是好用到爆。事实上,还有不少Java程序员没有掌握它们(扎心了吧)。Java8之前,启动一个线程要这样:Thread t = new Thread(new Runnable() { ...

不要写很酷但同事看不懂的Java代码

你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。为了提高Java编程的技艺,我最近在GitHub上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很6,来欣赏一下吧。IntStream.range(1, 5).boxed().map(i -> { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(System.out::println);我虽然拥有10年的Java编程经验,但说实话,很惭愧,这段代码就好像一块板砖拍在我脑袋上,有点懵逼。Lambda表达式我是学过的,Stream流我是学过的,forEach()方法我也是学过的,但把这些知识点全部塞到一行代码中,我还是有点消化不良。我总...

如何快速打好Java基础?

二哥,我是一名大学生,专业是电力工程,但想自学Java,如何快速打好基础呢?微信上tison向我提出了这个问题。我想我是有资格来回答的,从北京奥运会那年开始学Java,到现在已经有10多个年头了,真的是从一名编程白痴一步步走到现在的。我在各大技术网站上分享了不少Java方面的原创文章,不知道影响了多少初学者,反正文章的留言中经常能看到他们由衷的感谢。现在每天仍然有不少同学(tison是其中之一)加我微信,问我怎么一路过来的,希望能够把宝贵的经验分享出来,让他们少走一些弯路。借这个机会,就统一回答下。既然要快速,咱就没法面面俱到,必须挑重点、讲实用。下面就根据我的实战经验,谈一谈具体的学习过程。01、准备学习之路是一项很逆人性的差事,并不是每个人都能够坚持下来,尤其是打基础的阶段,过于强求的话可能就会适得其反,没入门先放弃了。1)对Java感兴趣,对互联网的高薪感兴趣,对“程序员秃顶”的段子视若无睹,只有这样,你才能真正地坚持下去。2)富有坚韧不拔的学习能力,别总遇到一点点困难,就自暴自弃。3)设定一个目标就死磕,如果你经常拿不到最终结果,需要反思是不是从来没有成功做成过一件困难的事情,...

Java 并发编程(一):简介

这篇文章的标题原本叫做——Java并发编程(一):简介,作者名叫小二。但我在接到投稿时觉得这标题不够新颖,不够吸引读者的眼球,就在发文的时候强行修改了标题(也不咋滴)。小二是一名Java程序员,就职于沉默公司,工龄是两年零一个月零三天。和刚毕业那会相比,编程能力已经大有提升,但领导老王一直没敢把并发编程的开发安排给小二,这让小二心里耿耿于怀。这事不怪老王,小二心里很清楚:编写正确的程序很难,编写正确的并发程序更是难上加难。自己功力还不到那个份上,万一搞砸了,难免让一向谨慎的老王面上无光。小二想来想去,办法只有一个,主动去学!就找老王要了一本《Java并发编程实战》,据说这本书是并发编程中的经典之作。拿到书后,随手翻了翻,竟然发现里面藏着一封情书:小二激动坏了,想象着老王写情话的样子,不由得笑出来声。(戛然而止)小二的背景就先介绍到这。接下来,我们来一起鉴赏下小二读完这本书后写下的第一篇文章。01、为什么需要操作系统我喜欢在写文章(不用纸和笔用电脑了)的时候听音乐(不用MP3用电脑了),假如电脑只能做一件事情的话,我就只能在写完文章的时候再听音乐,或者听完音乐的时...

Java 并发编程(三):如何保证共享变量的可见性?

上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保证共享变量的可见性(多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值)。我们使用同步的目的不仅是,不希望某个线程在使用对象状态时,另外一个线程在修改状态,这样容易造成混乱;我们还希望某个线程修改了对象状态后,其他线程能够看到修改后的状态——这就涉及到了一个新的名词:内存(可省略)可见性。要了解可见性,我们得先来了解一下Java内存模型。Java内存模型(JavaMemoryModel,简称JMM)描述了Java程序中各种变量(线程之间的共享变量)的访问规则,以及在JVM中将变量存储到内存→从内存中读取变量的底层细节。要知道,所有的变量都是存储在主内存中的,每个线程会有自己独立的工作内存,里面保存了该线程使用到的变量副本(主内存中变量的一个拷贝)。见下图。  也就是说,线程1对共享变量chenmo的修改要想被线程2及时看到,必须要经过2个步骤...

重学Java(一):与《Java编程思想》的不解之缘

 说起来非常惭愧,我在2008年的时候就接触了Java,但一直到现在(2018年10月10日),基础知识依然非常薄弱。用一句话自嘲就是:十年IT老兵,Java菜鸡一枚。于是,我想,不如静下心来,重新读一遍那些经典的Java技术书,并且没读完一章就输出一篇原创技术文章。从哪一本开始呢?想了一想,还是从《Java编程思想》开始吧!毕竟这本书赢得了全球程序员的广泛赞誉,从Java的基础语法到最高级特性,都能指导我们Java程序员轻松掌握。记得刚上大学那会,就买了一本影印版的《Java编程思想》,但由于初学Java,对编程极度缺乏信心,导致看这本书有一种看天书的感觉。后来,去苏州参加工作的时候把它作为最宝贵的纪念品带了过去。2014年回洛阳的时候它送给了一位关系不错的同事,权当是分别的礼物吧。2016年的时候,我又重新买了一本,希望自己能够夯实一下基础。但事与愿违,它被我束之高阁了——又两年过去了,我重新捧起它,总觉得有一种负罪感。读一本书,最好能从它的前言开始。那么我们就来看看BruceEckel在前言里都说了些什么吧。01、Java的核心目的是&ldquo...

Java 并发编程(二):如何保证共享变量的原子性?

线程安全性是我们在进行Java并发编程的时候必须要先考虑清楚的一个问题。这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗?我这个人,在没有副业之前,一心扑在工作上面,所以处理的蛮得心应手,心态也一直保持的不错;但有了副业之后,心态就变得像坐过山车一样。副业收入超过主业的时候,人特别亢奋,像打了鸡血一样;副业迟迟打不开局面的时候,人就变得惶惶不可终日。仿佛我就只能是个单线程,副业和主业并行开启多线程模式的时候,我就变得特别没有安全感,尽管整体的收入比没有副业之前有了很大的改善。怎么让我自己变得有安全感,我还没想清楚(你要是有好的方法,请一定要告诉我)。但怎么让一个类在多线程的环境下是安全的,有3条法则,让我来告诉你:1、不在线程之间共享状态变量。2、将状态变量改为不可变。3、访问状态变量时使用同步。那你可能要问,状态变量是什么?我们先来看一个没有状态变量的类吧,代码示例如下。class Chenmo {    public void write() {&nb...

Java 网络编程:必知必会的 URL 和 URLConnection

java.net.URL类将URL地址进行了封装,并提供了解析URL地址的基本方法,比如获取URL的主机名和端口号。java.net.URLConnection则代表了应用程序和URL之间的通信链接,可用于读取和写入此URL引用的资源。URLConnection看起来只是比URL多了一个Connection,它们之间的关系也仅限于此吗?01、什么是URL为了搞清楚什么是URL,需要引入另外两个概念URI和URN。什么鬼,URL都没搞清楚,又来两个搞不清楚的?别担心,我能像变了魔法一样让大家把三个都搞清楚。URI=UniversalResourceIdentifier,中文释义为统一资源标志符URL=UniversalResourceLocator,中文释义为统一资源定位符URN=UniversalResourceName,中文释义为统一资源名称它们之间的关系如下图所示:  这图啥意思啊,怎么办呢?张小敬有问题就去问葛佬,咱不会就去问“维基百科”啊。URI可以分为URL和URN,或者是URL和URN的结合体(同时具备Locator和Name)。...

Java Socket:飞鸽传书的网络套接字

在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快、会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”。而在Java中,网络套接字(Socket)扮演了同样的角色。套接字(Socket)是一个抽象层,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。套接字允许应用程序将I/O应用于网络中,并与其他应用程序进行通信。网络套接字是IP地址与端口的组合。01、ping与telnet“老王啊,能不能帮我看一下这个问题呢,明明本地可以进行网络通信,可等我部署到服务器上时就通信不了了,搞了半天也不知道什么原因,我看代码是没有问题的。”小二的语气中充满了沮丧。“ping过吗?或者telnet了吗?”老王头都没回,冷冰冰地扔出去了这句话。“哦,我去试试。”小二心头掠过一丝愧疚。ping与telnet这两个命令,对调试网络程序有着非常大的帮助。ping,一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。pin...

Java内存映射,上G大文件轻松处理

内存映射文件(Memory-mappedFile),指的是将一段虚拟内存逐字节映射于一个文件,使得应用程序处理文件如同访问主内存(但在真正使用到这些数据前却不会消耗物理内存,也不会有读写磁盘的操作),这要比直接文件读写快几个数量级。稍微解释一下虚拟内存(很明显,不是物理内存),它是计算机系统内存管理的一种技术。像施了妖法一样使得应用程序认为它拥有连续的可用的内存,实际上呢,它通常是被分隔成多个物理内存的碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。内存映射文件主要的用处是增加I/O性能,特别是针对大文件。对于小文件,内存映射文件反而会导致碎片空间的浪费,因为内存映射总是要对齐页边界,最小单位是4KiB,一个5KiB的文件将会映射占用8KiB内存,也就会浪费3KiB内存。java.nio包使得内存映射变得非常简单,其中的核心类叫做MappedByteBuffer,字面意思为映射的字节缓冲区。01、使用MappedByteBuffer读取文件假设现在有一个文件,名叫cmower.txt,里面的内容是:沉默王二,一个有趣的程序员PS:哎,改不了王婆卖瓜自卖自夸这个臭毛病了,...
首页上一页...565566567568569...下一页尾页