Java
Java是一门面向对象编程语,经过多年发展,目前已广泛应用在各个领域,我将通过这个专栏与大家分享Java相关知识与实践经验。
Sam.Shi
这个作者很懒,什么都没留下…
展开
-
解决多线程程序使用JDBC连接数据库的异常
多线程就带来了高并发,短时间内大量的请求发向数据库,在运行过程中出现了以下错误:** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.CommunicationsExceptionMESSAGE: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION *原创 2017-07-05 11:41:26 · 8179 阅读 · 0 评论 -
Java中使用selenium调用chrome浏览器下载图片错误的解决办法
应用场景有个项目需要将网页上面的图表放生成的word报告中,页面上面的图表是用Echarts做的,因为要求word报告中的图表和页面上的图表保持一致,所以将页面上面的图表截图保存到数据库中,然后从数据库中查询到图片放到word报告中。为了实现自动截图保存,项目采用selenium打开chrome浏览器,访问页面后通过js截图,然后下载到文件夹中,程序运行了很长一段时间都没有问题,最近chrome...原创 2019-06-26 11:28:34 · 2039 阅读 · 1 评论 -
Java中的hashCode方法和hashCode值
Java中的类都有一个hashCode方法,这个方法用来生成hashCode值,这个值是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)生成的,这个值的作用是为了提高集合类的性能,例如HashSet、HashMap以及HashTable。我们可以调用对象的hashCode方法来生成hashCode值,因为两个不同的对象可能会有相同的hashCode值,所有不能通过hashCo...原创 2018-12-25 08:33:39 · 8137 阅读 · 1 评论 -
Java创建对象的时候属性用基本数据类还是包装类好
基本数据类Java中的基本数据类型不是面向对象的,它们只是纯粹的数据,除了数值本身的信息之外,基本类型数据不带有其他信息或者可操作方法。类型字节数byte1short2int4long8char2float4double8boolean1优点:1,用于计算是效率高;2,值比较方便,使用 == 就可以了。缺...原创 2018-12-23 15:57:30 · 6664 阅读 · 0 评论 -
Java中限定类名和非限定类名的区别
限定类名,就是类名全称,带包路径的用点隔开,例如: java.lang.String。 非限定(non-qualified)类名也叫短名,就是我们平时说的类名,不带包的,例如:String。 非限定类名是相对于限定类名来说的,在Java中有很多类,不同的类之间会存在相同的函数或者方法,所以有时候就需要限定类名来调包。 而如果不存在相同的函数或者方法 ,就可以使用非限定(non-qualifi...转载 2018-06-12 10:14:56 · 17584 阅读 · 4 评论 -
Hibernate5.2之原生SQL查询
Hibernate5和4对原生SQL语句的查询方法是不一样的,今天在网上找了一些实用的例子,给大家分享一下。1,获取所有的Order对象,得到一个List集合@Testpublic void list(){ String sql = "select * from orders"; NativeQuery<Order> query = session.creat...转载 2018-06-08 16:50:42 · 1925 阅读 · 0 评论 -
使用SessionFactory的OpenSession的方法创建Session导致事物不起作用
hibernate中创建用来连接数据库的Session,有两种方式。1.通过Spring的SessionFactory的getCurrentSession的方法创建Session 。2.通过Spring的SessionFactory的OpenSession的方法创建Session。getCurrentSession 创建的Session会绑定到当前线程中去,commit或rollbac...转载 2018-03-10 16:05:57 · 6938 阅读 · 0 评论 -
在linux上配置java环境
服务器:Centos Linux 7.3 JAVA:jdk1.7.0_801,将jdk文件上传到linux服务器的/usr/local目录下; 2,用文本编辑器打开/etc/profile,在profile文件末尾加入以下内容:export JAVA_HOME=/usr/java/jdk-7u79-linux-x64/jdk1.7.0_79export CLASSPATH=.:$原创 2018-01-30 14:50:51 · 772 阅读 · 0 评论 -
slf4j是什么
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。如果一个项目已经使用了log4j,而你加载了一个类库,比方说 Apache Active MQ——它依赖于于另外一个日志类库logback,那原创 2017-12-19 16:36:09 · 12628 阅读 · 0 评论 -
解决Failed to load class "org.slf4j.impl.StaticLoggerBinder"
目录用 [TOC]来生成目录:目录问题原因解决方案问题springmvc项目,使用的是log4j日志插件,项目启动时报以下错误SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J:原创 2017-12-19 16:02:58 · 9446 阅读 · 1 评论 -
Java连接mongodb存取数据时调整日志输出级别
通过JDBC的方式连接mongodb进行数据存取时在终端上打印以下日志Nov 22, 2017 7:01:12 AM com.mongodb.diagnostics.logging.JULLogger logINFO: Cluster created with settings {hosts=[172.16.0.102:27017], mode=SINGLE, requiredClusterTyp原创 2017-11-23 09:17:03 · 8211 阅读 · 0 评论 -
Hibernate对象的三种状态及避免误更新
Hibernate的对象有三种状态,分别为:瞬时状态 (Transient)、 持久化状态(Persistent)、游离状态(Detached)。一. 瞬时状态(Transient)由new命令开辟内存空间的java对象,它没有持久化,没有处于Session中,处于此状态的对象叫瞬时对象。例:Person person = new Person(“韩梅梅”, “女”);如果没有变量对该对象进行引用,原创 2017-08-11 16:27:44 · 589 阅读 · 0 评论 -
HQL查询语句拼接规范,避免SQL注入攻击
软件开发过程中不仅要考虑软件的功能实现,还要考虑软件的安全性,如果一个软件系统安全性做得不好,一旦被黑客攻击,后果不堪设想。对于B/S系统,SQL注入攻击就是一个常见的安全隐患,下面我们来看下如何在日常开发中避免SQL注入攻击。SQL注入简介 SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数原创 2017-07-26 17:33:33 · 7729 阅读 · 0 评论 -
Java多线程简单实例
最近为了提高批处理程序的统计效率,将程序改为多线程执行,由原来的单一线程计算改为五个线程同时计算,大大缩短了统计时间。实现原理很简单,就是将需要计算的内容分成五份交给五个线程进行统计,五个线程相互之间没有影响。程序public class GenerateMonitorCompanyAndPersonRisk implements Runnable{ private List<SysAccou原创 2017-06-05 11:28:40 · 744 阅读 · 0 评论 -
Java遍历Map的方法
很多情况下我们都是遍历list,偶尔也需要遍历map,我们在这里总结下遍历map的方法,便于以后开发时采用。1,通过Map.entrySet遍历key和valueMap<String, Object> map = new HashMap<String, Object>(); for (Map.Entry<String, Object> entry : map.entrySet()) {原创 2017-06-01 14:07:56 · 715 阅读 · 0 评论 -
Java properties属性文件中的值换行
在使用properties配置文件的时候我们经常碰到如下两个问题 1:当a=b中的b值内容特别长的时候为了阅读方便我们手动换行,但如果我们直接回车那么后面的数据就会丢失。那如何解决呢? 例如: a=aaaaaaaaasdfasdfasdfasdfasdfadfasdfaf 可以通过在行尾加反斜杠来换行 a=aaaaaaaaas\ dfasdfasdfasdfasdfadfasdfaf2:原创 2017-03-16 17:41:50 · 3355 阅读 · 0 评论 -
添加一个对象到集合中时,集合里面存放的是对象的引用
当批量处理一些数据的时候,经常会将生成的对象放入集合中,这时候很容易犯一个错误,就是将已经放入集合中的对象修改部分属性后,又重新放入这个集合,表面上看是将一个新的对象放入集合中,实际上原来集合中的对象的属性已经被修改了。因为集合中存放的是对象的引用,改变原来对象的属性,那么从集合中得到的对象属性也就变了。下面一个示例就是这个问题monitorCompanyRiskGradeTrend = new M原创 2017-03-13 14:48:51 · 8698 阅读 · 0 评论 -
log4j2.x配置文件中各标签详解
log4j2.0以后我们通常在log4j2.xml中配置相关参数,在配置的时候我们需要理解这些参数的具体含义,下面列出了这些参数的解释。1、Logger 完成日志信息的处理<logger name="com.srd.ljzd" level="INFO" additivity="true"> <appender-ref ref="INFO" /> <appender-ref ref="原创 2017-01-22 10:36:55 · 15746 阅读 · 1 评论 -
如何解决log4j打印日志出现中文乱码
最近在项目部署后发现在tomcat窗口中打印出的日志中中文是乱码的,因为在开发环境中是没有乱码出现的,所以判断是因为服务器编码导致日志在窗口中显示成了乱码,还好日志文件中打印出来的中文不是乱码,但是窗口中老显示乱码也是要解决的,解决方案如下:<Console name="Console" target="SYSTEM_OUT"> <PatternLayout charset="GBK" pa原创 2016-12-31 23:01:14 · 20850 阅读 · 2 评论 -
在Eclipse中打包引用了第三方jar包的J2SE项目成jar文件的方法
最近有个项目有些定时任务,一开始用的quartz,挺好用的一款定时任务工具,但是对大量数据处理时,消耗了大量的tomcat资源,所以决定将一些处理大批量数据的定时任务从web应用中分离,做成批处理的形式。我的方法是创建Java项目,使用JDBC连接数据库进行数据处理,然后打包成jar文件,通过系统调用运行,这样独立运行避免对应web应用造成影响。其实之前也接触过Kettle这种etl工具,这应该是主原创 2016-09-29 15:18:45 · 2391 阅读 · 0 评论 -
Java使用JDBC获取数据并打印出来
JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API。JDBC API提供了以下接口和类: |DriverManager| 这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。| |Driver|此接口处理与数据库服务器原创 2016-09-28 17:33:48 · 16190 阅读 · 4 评论 -
Java中如何将int 类型转换为 Long类型
Long l = (Long)3;很多同学可能会用上面的方法将int类型转换为Long类型,但事实上这样是不可行的。因为Long是包装类,而int是值类型数据,两者是不能这样强转的。long l = (long)3;int和long都是基本类型的数据,是可以强转的,那么我就可以以此作为桥梁,强转成long后,再生成Long类型的数据。Long l = new Long((long)3);这样就可以将原创 2016-09-28 09:53:05 · 149965 阅读 · 5 评论 -
在fastjson中使用SimplePropertyPreFilter忽略指定属性
将对象转换成json格式的时候,常常需要排除一些字段(例如延迟加载的字段)。在fastjson库中,我们可以使用SimplePropertyPreFilter忽略掉这些属性。SimplePropertyPreFilter filter = new SimplePropertyPreFilter();filter.getExcludes().add("name");String result = J原创 2016-09-27 11:57:24 · 16503 阅读 · 4 评论 -
使用fastjson的parseObject方法将json字符串转换成Map
HashMap<String,String> map = JSON.parseObject(jsonStr, new TypeReference<HashMap<String,String>>() {});原创 2016-09-27 10:45:24 · 20011 阅读 · 2 评论 -
Java中如何得到程序的执行时间
在调试程序的时候,有时候需要知道一段程序执行的时间,那我们就可以使用Calendar的getTimeInMillis()方法来得到这个执行时间,getTimeInMillis是获取当前毫秒级的时间,返回类型是long。我们只要在需要记录时间的程序开始和结尾的地方获取当前毫秒级的时间,然后相减就可以得到程序执行的时间了。示例如下:long t1 = Calendar.getInstance().get原创 2016-09-26 14:55:58 · 2991 阅读 · 0 评论 -
log4j 2.0以后版本的配置文件命名规则
log4j是apache的一个开源项目,目前的版本已经更新到2.6.2,首先需要注意的是,log4j 2.0以后的版本与以往的1.x有一个明显的不同,其配置文件只能采用.xml, .json或者 .jsn。在默认情况下,系统选择configuration文件的优先级如下:(classpath为scr文件夹)1. classpath下名为 log4j-test.json 或者log4j-test.js原创 2016-09-23 21:50:29 · 2062 阅读 · 0 评论 -
log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。ALL 最低等级的,用于打开所有日志记录。TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别原创 2016-09-23 21:41:10 · 151935 阅读 · 3 评论 -
Java中精确到(保留)小数点后几位的方法
1,double f = 111231.5585; BigDecimal b = new BigDecimal(f); doublef1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 2,java.text.DecimalFormat df =new java.text.DecimalFormat("#.00"); d原创 2016-09-23 18:16:03 · 33066 阅读 · 0 评论 -
关于在循环中和在循环外定义变量的区别的思考
变量的声明是在栈中进行的,而实例化则是在堆中,故栈中只有基础数据与实例的引用。 故上面程序的不同点: 1、在外面的定义的变量,只在栈中声明了一次; 2、在里面的定义的变量,循环多少次就在栈中声明了多少次; 3、在内存或说资源节省方面,肯定是在外面定义较好,是摧荐的写法;原创 2016-09-22 18:14:22 · 6127 阅读 · 0 评论 -
如何使用String的replaceAll方法替换字符串中的反斜杠“\”或增加反斜杠“\”
replaceAll方法经常被用来替换字符串中的文字,基本使用方法如下:public String replaceAll(String regex, String replacement)replaceAll的两个参数都是正则表达式,所以需要按照正则表达式的写法去写。比如:replaceAll(“\d”, “*”)是指把一个字符串所有的数字字符都换成星号。反斜杠“\”在java中是一个转义字符,所以原创 2016-09-22 15:54:33 · 15054 阅读 · 1 评论 -
hibernate hql语句中条件参数中包含特殊字符单引号' 的处理办法
在我们编写hql语句的时候,where条件中的参数两端常常会加上”’”单引号,一般情况下是没有问题的,但是如果参数中包含单引号呢,例如一家公司的名称“CompagnieFrancaised’Etudesetd’Erises-CFEE-”,这时程序在执行过程中就会报错,报错信息如下所示:九月 22, 2016 2:42:35 下午 org.hibernate.hql.internal.ast.Erro原创 2016-09-22 14:52:16 · 12912 阅读 · 1 评论 -
在windows系统中配置JAVA环境
除了在web容器中设置虚拟机内存的大小,我们还可以为windows系统设置统一的虚拟机内存,如果一台服务器上面部署了多个web容器,我们就可以只设置一个地方,从而提高维护效率。那么如何配置呢,请看如下步骤: 1,打开windows系统环境变量 2,在系统变量中,新建变量JAVA_OPTS,值设置为Xms1024M -Xmx2048M -XX:PermSize=256M -XX:MaxNewSiz原创 2016-09-14 14:12:03 · 23949 阅读 · 4 评论