program
文章平均质量分 80
peterwanghao
这个作者很懒,什么都没留下…
展开
-
Java自带日志工具java.util.logging.Logger
java.util.logging.Logger是JDK自带的日志工具类,从1.4版本开始就已经有了。由于log4j等开源的日志组件,这个Logger并没有太多展现机会。但在一些测试性的代码中,JDK自带的Logger比log4j等更方便。创建Logger对象要使用JDK的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得:static Logger getLogger(String name)原创 2021-12-24 18:30:31 · 12263 阅读 · 8 评论 -
JVM介绍与参数详解
JVM是Java Virtual Machine(Java虚拟机)的缩写,它是java运行环境的一部分,是一个虚构出来的计算机,它是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java虚拟机后,Java语言在不同平台上运行时就不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在整个JDK中处于最底层,负责与操作系统之间进行交互。JVM是java字节码执行的原创 2021-05-10 17:58:24 · 745 阅读 · 0 评论 -
SQL语句merge into的用法
应用场景在批量更新大量的数据时,使用Insert 和Update操作会出现效率低下,甚至卡死的情况。改用 MERGE INTO 代替执行批量更新,会提升执行效率。merge into将源数据(来源于实际的表,视图,子查询)更新或插入到指定的表中(必须实际存在),好处是避免了多个insert 和update操作。merge into是一个目标性明确的操作符,不允许在一个merge 语句中对相同的行insert或update操作。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于insert+u原创 2020-07-24 13:56:07 · 13030 阅读 · 0 评论 -
Java中的匿名类与Lambda表达式
匿名类匿名类是一个没有名称的内部类,并且只能创建一个对象实例。当要实现某些“额外”功能(例如类或接口的重载方法)来创建对象的实例时,匿名类可能很有用,这时不必实际子类化。匿名类主要以两种方式创建:继承类(可以是抽象的或具体的)实现接口Java引入了匿名类的创建,以减少代码复杂性。如果我们创建一个单独的类来实现一个接口并使用它的实例来调用该方法,则会产生开销。而当我们从不在其他任何地方...原创 2019-12-27 11:20:03 · 4404 阅读 · 3 评论 -
Java中生成唯一ID的方法
有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID。UUID从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法。UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的D...原创 2019-12-19 15:47:36 · 21120 阅读 · 7 评论 -
Twitter的snowflake算法改进
Twitter的snowflake算法是在分布式系统中一种自增ID的算法,ID能够按照时间有序生成并且可以做到全局唯一。算法生成的是Long类型的id,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特(0和1)。Twitter是这样分配的:正数位(占1比特)+时间戳(占41比特)+机器id(占5比特)+数据中心(占5比特)+自增值(占12比特),总共64比特组...原创 2019-12-13 13:37:49 · 1130 阅读 · 0 评论 -
Netty 核心概念介绍和简单示例
Netty是一个异步的,事件驱动的网络框架,我们可以使用它来开发高性能客户端和服务器。在本文中,我将解释一些基本的netty概念,以便当我们开始使用netty框架来构建我们自己的Http Web服务器和客户端时,很容易理解Netty术语。核心概念ChannelChannel是Java NIO的基础。它表示一个开放的连接,能够执行IO操作,例如读取和写入。Channel向开发人员提供以下内容...原创 2019-11-22 16:33:05 · 717 阅读 · 0 评论 -
使用Guava EventBus实现Java组件间的通信
在构建企业应用程序时经常出现的一种情况是在一个过程成功后需要实现一系列业务流程,例如,如果您正在构建购物网站,则可能需要在产品付款成功后执行以下操作:购买后减少商店中可用的物品数量。向商店老板发送收据。向买方发送收据。在某些情况下,您可能希望这些过程对于产品购买而言是原子性的,也就是说,在发生产品购买之后,必须减少项目数量,如果在减少可用项目数量方面存在问题,则还原产品购买。通常会在事...原创 2019-11-14 17:47:33 · 5768 阅读 · 2 评论 -
解决ActiveMQ服务停掉后无限重连问题
断线重连机制是ActiveMQ的高可用性具体体现之一。ActiveMQ提供failover机制去实现断线重连的高可用性,可以使得连接断开之后,不断的重试连接到一个或多个brokerURL。默认情况下,如果client与broker直接的connection断开,则client会新起一个线程,不断的从url参数中获取一个url来重试连接。但有时在做开发时可能不需要连接服务器,这时程序在后台出现了...原创 2019-11-08 16:15:11 · 4895 阅读 · 0 评论 -
使用SpotBug进行静态代码检查
在运行程序前我们可以通过编译来发现问题,但这样是远远不够的。这是因为在编译期间仅捕获到非常小的错误范围,即语法错误,无效引用等。当程序包含编译错误时,IDE会发出警告,但它无法防范其他类型的错误,例如运行时错误或逻辑错误。通过使用静态分析工具SpotBugs,浏览代码以查找某些“已知的坏味道”:可能会导致偶发性/间歇性问题,性能不佳等的事物。这些问题很难通过测试找到,因此通过检查通常是唯一可行的...原创 2019-11-07 18:50:28 · 5573 阅读 · 0 评论 -
Java注解的用处和使用
Java 注解(Annotation)又称为 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 (通过 解析注解 来使用这些数据)。 它也支持自定义 Java ...原创 2019-11-02 00:07:08 · 6554 阅读 · 1 评论 -
H5通过数据流方式播放视频
本文介绍如何通过H5页面通过数据流的方式播放服务端的视频文件,可以兼容PC、Android和IOS环境。H5页面可以通过<video> 标签来播放视频。一般的方式如下:<!DOCTYPE HTML><html><body><video src="/i/movie.mp4" controls="controls">your b...原创 2019-10-21 16:42:58 · 18538 阅读 · 6 评论 -
JFreeChart的柱状图实现
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产原创 2011-12-02 10:23:38 · 5646 阅读 · 1 评论 -
spring-data-dynamodb启动时报ClassNotFoundException: org.springframework.data.querydsl.QuerydslUtils解决方法
Spring Boot集成DaynamoDB时无法正常启动,报错Caused by: java.lang.ClassNotFoundException: org.springframework.data.querydsl.QuerydslUtils at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_05]...原创 2018-11-21 12:10:44 · 1001 阅读 · 0 评论 -
java中的线程安全是什么?什么叫线程安全?什么叫不安全?
java中的线程安全是什么:就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问。什么叫线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说...转载 2019-04-30 11:07:46 · 7381 阅读 · 0 评论 -
Spring Cache 介绍
Spring Cache是对缓存使用的抽象,通过它我们可以在不侵入业务代码的基础上让现有代码即刻支持缓存。为现有的Spring 应用添加Cache非常简单,为了启用缓存,Spring充分利用了注释,就像启用框架中的任何其他配置级功能一样。1 启动缓存只需将@EnableCaching注解添加到任何配置类,即可以声明方式启用高速缓存功能:@Configuration@EnableCachin...原创 2019-07-15 16:01:11 · 1963 阅读 · 0 评论 -
Spring 核心注解介绍
Spring是一款轻量级的IOC框架,Spring的核心就是Ioc和DI,并通过俩者解耦。Ioc(Inversion of control)控制反转,可以把创建对象和查找依赖对象的权限交给Ioc容器控制,而不是传统的由这些对象的使用方(消费者)进行创建初始化操作。IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。DI(Dependency Injec...原创 2019-07-18 14:19:12 · 2876 阅读 · 1 评论 -
Spring Boot2 中的懒加载
默认情况下,在Spring中创建应用程序上下文时会创建所有已定义的bean及其依赖项。但是,当我们使用延迟初始化配置bean时,只会创建bean,并在需要时注入其依赖项。启用全局延迟初始化Spring Boot 2中引入了spring.main.lazy-initialization属性,使得在整个应用程序中配置延迟初始化变得更加容易。将属性值设置为true意味着应用程序中的所有bean都...原创 2019-07-12 14:34:30 · 6491 阅读 · 1 评论 -
Spring Data 注解介绍
Spring Data是Spring 的一个子项目,用于简化数据库访问。Spring Data提供了对数据存储技术的抽象。使业务逻辑代码可以更加独立于底层的持久化实现。目前Spring Data支持NoSQL和关系数据库存储。在本文中,我们将介绍Spring Data,Spring Data JPA和Spring Data MongoDB项目中最常见的注解。1 常见的Spring Data注解...原创 2019-07-25 15:23:56 · 3859 阅读 · 1 评论 -
Spring JTA分布式事务实现
1.概述Java Transaction API,通常称为JTA,是用于管理 Java中的事务的API 。它允许我们以资源无关的方式启动,提交和回滚事务。根据用于管理事务的底层实现,Spring中的事务策略可以分为两个主要部分:单连接器策略(相当于本地事务管理器) - 底层技术使用单连接器。例如,JDBC使用连接级事务、Hibernate以及JDO使用会话级事务。可以应用使用AOP和拦截器...原创 2019-08-26 13:56:01 · 11685 阅读 · 2 评论 -
解决Maven报错:Plugin execution not covered by lifecycle configuration
当一个新的maven项目导入到工作空间中可能会遇到maven插件lifecycle configuration 错误,例如:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (execution: valida...原创 2019-08-29 17:31:10 · 9714 阅读 · 1 评论 -
MySQL 5.7中对XA支持的改进
介绍XA的意思为“eXtended Architecture”,是The Open Group组织为分布式事务处理创建的标准。虽然MySQL 5.0是第一个支持XA的版本,但MySQL 5.7提升了XA支持的可靠性,修复了许多错误,并增加了整体测试用例覆盖率。背景XA解决了在分布式资源集中的单个事务中保留ACID属性的问题。资源本身可以是其他MySQL服务器,甚至是不同的数据库技术。XA的标...原创 2019-09-11 13:37:39 · 2051 阅读 · 0 评论 -
分布式服务接口:Rest与RPC比较
分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的。一个Web服务提供服务API(Application Programming Interface),通过网络在客户端和服务器之间进行通信。服务接口调用大体上就分为两类:RPC(Remote Procedure Call)式和REST式 (Representational State Transfe...原创 2019-09-20 11:24:40 · 1665 阅读 · 0 评论 -
Java字符串比较方法equals的空指针异常
在Java语言中字符串比较有两种方式:== 和equals()。“==”比较的是针对两个String类型变量的引用,当两个String类型的变量指向同一个String对象(即同一个内存堆),则返回true。而equals()方法是对String对象封装的字符串内容进行比较,相同返回true。在用equals方法与其他值做比较的时候,有可能会导致抛出空指针异常。写一个小程序来举例说明:publ...原创 2019-09-26 16:10:53 · 9195 阅读 · 5 评论 -
JAVA写CSV文件
java写csv文件,通过文件输出流和第三方工具库opencsv两种方式。原创 2017-07-14 16:40:58 · 12802 阅读 · 0 评论 -
使用Spring-data-redis操作Redis的Sentinel
介绍Spring-Data-Redis项目(简称SDR)是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例如:jedis,jredis,jdbc-redis等)的抽象,使开发中可以几乎完全屏蔽具体使用客户端的影响,使业务代码保持较强的稳定性。Spring-Data-Redis提供了一个基础的泛型RedisTemplate原创 2015-04-10 15:18:55 · 36222 阅读 · 4 评论 -
一个用于J2EE应用程序的异常处理框架
在大多数Java项目中,大部分代码都是样板代码。异常处理就属于此类代码。即使业务逻辑只有3到4行代码,用于异常处理的代码也要占10到20行。本文将讨论如何让异常处理保持简单和直观,使开发人员可以专心于开发业务逻辑,而不是把时间浪费在编写异常处理的样板代码上。本文还将说明用于在J2EE环境中创建和处理异常的基础知识和指导原则,并提出了一些可以使用异常解决的业务问题。本文将使用Struts框架作为表示转载 2014-11-05 11:22:15 · 902 阅读 · 0 评论 -
基于Apache Mina实现的UDP服务端
Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 2 可以作为开发网络应用程序的一个良好基础。本文介绍了如何使用Apache Mina开发UDP服务端程序。public class UdpServer { privat原创 2012-05-18 14:48:01 · 5584 阅读 · 1 评论 -
POI导出Excel文件图片丢失问题解决
在我上一篇文章(http://blog.csdn.net/peterwanghao/article/details/7102397)中提到了通过POI将数据导入一个Excel文件的两个Sheet方法。发现如果将两个Sheet互换下,即第一个Sheet中包含图片的话生成的Excel文件中图片就会丢失。效果如下:原因是由于生成第二个Sheet时打开一个Workbook的流,而图片并不保原创 2011-12-30 10:52:20 · 6766 阅读 · 0 评论 -
使用POI生成Excel文件
Apache POI 是用Java编写的免费开源的跨平台的 Java API,提供对Microsoft Office格式档案读和写的功能。使用POI导出EXCEL的例子很多,这里列出一个比较完善的实例 http://blog.csdn.net/xw13106209/article/details/6619092我在此例子上进行了改造,实现了在一个Excel文件中保存两个Shee原创 2011-12-26 10:20:00 · 6977 阅读 · 0 评论 -
JFreeChart柱状图单组柱子的不同颜色显示
JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法。实现效果如下:实现代码如下:public class CustomRenderer extends org.jfree.chart.renderer.category.BarRenderer {原创 2011-12-09 10:35:23 · 5432 阅读 · 1 评论 -
Syslog4j如何实现接收日志
1、前言Syslog4j是一个实现Syslog(RFC3164)协议的Java开源类库包括客户端与服务器端。通过 UDP/IP, TCP/IP, TCP/IPover SSL/TLS, Unix Syslog, 和 Unix Socket 等协议进行日志记录。本文介绍了如何使用Syslog4j作为日志服务端接收Syslog日志。2、需要的资源 下载地址 :http:原创 2011-11-11 09:37:50 · 12456 阅读 · 1 评论 -
PHP调用JAVA的WebService实例
使用PHP调用JAVA语言开发的WebService。客户端提交两个String类型的参数,服务端返回一个对象类型。服务端使用AXIS-1.4作为SOAP引擎。客户端为PHP5.2.9,使用NuSOAP作为SOAP引擎。服务端对象类import java.io.Serializable;public class Person implements Serializa原创 2011-11-04 15:04:34 · 4916 阅读 · 1 评论 -
Syslog4j中的日志格式处理
Syslog协议定义的日志格式如下:PRI部分HEADER部分MSG部分优先级时间主机名/IPTAGContentMMM dd hh:mm:ss 进程名称和进程PID消息内容 Sys原创 2011-11-18 09:18:57 · 3936 阅读 · 0 评论 -
使用Apache Mina时做编码转换的方法
在使用Apache MINA开发网络应用时需要使用一个过滤器来实现数据的编解码,因为在网络传输的数据都是二进制数据(byte),而你在程序中面向的是JAVA 对象,这就需要你实现在发送数据时将JAVA 对象编码二进制数据,而接收数据时将二进制数据解码为JAVA 对象。Mina 中的协议编解码器通过过滤器ProtocolCodecFilter 构造,这个过滤器的构造方法需要一个ProtocolC原创 2011-10-28 14:15:13 · 6688 阅读 · 0 评论 -
Syslog协议介绍
在网上搜的文章,写的很全乎。摘抄如下,供大家参考学习1、介绍 在Unix类操作系统 上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的 服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。完 整转载 2011-11-16 11:00:11 · 1590 阅读 · 0 评论 -
基于Apache Mina的一个简单应用
1、前言Apache MINA是Apache组织的一个优秀的项目。MINA是Multipurpose Infrastructure forNetwork Applications的缩写。它是一个网络应用程序框架,用来帮助用户非常方便地开发高性能和高可靠性的网络应用程序。在本文原创 2011-10-14 14:11:52 · 2149 阅读 · 0 评论 -
java连接Active Directory进行用户认证
将Windows2003 升级为域控制器:在运行对话框里输入dcpromo,进入AD安装向导。一步步执行即可。执行完后可通过管理工具在AD中添加用户。使用新建的用户登录系统时会出现问题:1)点击管理工具,域安全策略或域控制器安全策略时,提示错误:“未能打开组策略对象 企图在不存在的网络连接上操作 ”gpedit.msc是可以打开本地组策略的。原因是服务中的Compute原创 2012-05-25 15:31:52 · 3976 阅读 · 0 评论 -
Apache Mina 白名单实现方法
Mina自带了一个黑名单过滤器BlacklistFilter,可过滤黑名单列表中的网络连接。用来防止非法的客户端访问。但在某些应用场景里需要设定白名单,只接收某些指定IP的客户端发来的数据。这就需要实现白名单功能。我们可以自己实现白名单过滤器,方法很简单只需仿照BlacklistFilter做些修改即可。我自己写的WhiteFilter,代码如下:/** * Whitelist原创 2012-07-19 15:43:37 · 1640 阅读 · 0 评论 -
密码加盐-Salting password
今天看到一个新鲜词:Salting password,加盐的密码。感觉很是纳闷,这是什么意思呢?上网查了下原来是对密码进行一些混淆增加破解的难度。一般对密码都不会是明文存储,而是对密码进行MD5处理,增强反向解密难度。但这样还是能可以找出破绽。如果用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,就会知道别人用的和自己就是同一个密码。对于这个问题原创 2012-07-24 15:25:46 · 17664 阅读 · 2 评论