java_java日志详解

合集下载

jar包介绍大全用途作用详解java

jar包介绍大全用途作用详解java

file:///E|/世界五百强企业绝密文件请勿外传/JAR包介绍大全用途作用详解JAVA.txt[2016/11/25 17:33:28]jta.jar 标准JTA API必要commons-collections.jar 集合类 必要antlr.jar ANother Tool for Language Recognition 必要asm.jar ASM字节码库 如果使用“cglib” 则必要asm-attrs.jar ASM字节码库 如果使用“cglib” 则必要ehcache.jar EHCache缓存 如果没有其他的缓存,则是必要的cglib.jar CGLIB字节码解释器 如果使用“cglib” 则必要commons-beanutils.jar 提供对java反射和自省API的包装 对bean操作的类,可以访问类的属性及get和set方法commons-digester.jar Digester基于规则的XML文档解析,主要用于XML到java对象的映射commons-lang.jar 包含了一些数据类型工具类,是ng.* 的扩展 必须使用的包commons-pool.jar,commons-dbcp.jar DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCPcommons-chain.jar Jakarta Commons的子项目Chain将上述两个模式组合成一个可复用的Java框架用于描述顺序的处理流程 strutsheShale应用框架作为处理HTTP请求处理的基础机制commons-validator.jar 用来帮助进行验证的工具。比如验证Email字符串,日期字符串等是否合法。Burlap.jar 支持ejb,远程调用Remoting方面的类

file:///E|/世界五百强企业绝密文件请勿外传/JAR包介绍大全用途作用详解JAVA.txt[2016/11/25 17:33:28]buffalo.jar 处理xml的jar包commons-betwixt.jar 用xml生成报表时需要用到的包commons-el.jar Apache 组织中一个用来解析 JSP 2.0 的表达式语言的 Java htmlparser.jar 是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html类库jakarta-oro.jar java正则表达式所需的包jaxen.jar 在jdom中使用xpath需要导入jaxen.jar包mina-core.jar Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架这里主要介绍的是Hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱。本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进行取舍。 下载Hibernate,例如2.0.3稳定版本,解压缩,可以看到一个hibernate2.jar和lib目录下有22个jar包: hibernate2.jar: Hibernate的库,没有什么可说的,必须使用的jar包 cglib-asm.jar:

Java正则表达式详解,附实例(PDF精品)

Java正则表达式详解,附实例(PDF精品)

如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从下载源代码开放的Jakarta-ORO库。本文接下来的内容先简要地介绍正则表达式的入门知识,然后以Jakarta-ORO API为例介绍如何使用正则表达式。 一、正则表达式基础知识 我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说:

1.1 句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符:

1.2 方括号符号 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:

javalist,set,map,数组间的相互转换详解

javalist,set,map,数组间的相互转换详解

javalist,set,map,数组间的相互转换详解

java list,set,map,数组间的相互转换详解

1.list转set

Set set = new HashSet( new ArrayList());

2.set转list

List list = new ArrayList( new HashSet());

3.数组转为list

List stooges = Arrays.asList( "Larry" , "Moe" , "Curly" );

此时stooges中有有三个元素。注意:此时的list不能进⾏add操作,否则会报

“ng.UnsupportedOperationException”,Arrays.asList()返回的是List,⽽且是⼀个定 长的List,所以不能转换为

ArrayList,只能转换为AbstractList

原因在于asList()⽅法返回的是某个数组的列表形式,返回的列表只是数组的另⼀个视图,⽽数组本⾝并没有消失,对列表的任何操

作最终都反映在数组上. 所以不⽀持remove,add⽅法的

String[] arr = { "1" , "2" };

List list = Arrays.asList(arr);

4.数组转为set

int [] a = { 1 , 2 , 3 };

Set set = new HashSet(Arrays.asList(a));

5.map的相关操作。

Map map = new HashMap();

map.put("1" , "a" );

map.put('2' , 'b' );

map.put('3' , 'c' );

System.out.println(map);

// 输出所有的值

System.out.println(map.keySet());

// 输出所有的键

System.out.println(map.values());

logback常用配置详解(四)appender每天生产一个日志文件,或者按规定大小生产日志文件

logback常用配置详解(四)appender每天生产一个日志文件,或者按规定大小生产日志文件

logback常用配置详解(四)appender每天生产一个日志文件,或者按规定大小生产日志文件

logback 常用配置详解(二)

是的子节点,是负责写日志的组件。

有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。

1.ConsoleAppender:

把日志添加到控制台,有以下子节点:

:对日志进行格式化。(具体参数稍后讲解 )

:字符串 System.out 或者 System.err ,默认 System.out ;

例如:

1.

2.

3.

4.

5. %-4relative [%thread] %-5level %logger{35} - %msg %n

6.

7.

8.

9.

10.

11. 12.

2.FileAppender:

把日志添加到文件,有以下子节点:

:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。

:对记录事件进行格式化。(具体参数稍后讲解 )

:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

例如:

1.

2.

3.

4. testFile.log

5. true

6.

7. %-4relative [%thread] %-5level %logger{35} - %msg%n

8.

9.

10.

11.

12.

13.

14.

3.RollingFileAppender: 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:

Java中Flyway的使用详解

Java中Flyway的使用详解

Java中Flyway的使⽤详解

Flyway的使⽤

环境:SpringBoot 2.0.4.RELEASE为什么要⽤Flyway?

开发⼈员在合作的时候经常遇到以下场景:1.开发⼈员A在⾃⼰的本地数据库做了⼀些表结构的改动,并根据这些改动调整了DAO层的代码,然后将代码上传到svn或git等版本控制服务器上。此时如果开发⼈员B拉取了A的代码改动,在运⾏项⽬的时候很可能会报错,因为B的本地SQL数据库并没有修改。2.在项⽬上线的时候,当服务器拉取的版本控制服务器的最新修改后,必须同时运⾏SQL数据库的修改脚本,如果忘了跑数据库脚本,那么会出现严重的问题。

传统的解决⽅案就是在⼀个固定的⽂件夹中,将需要跑的SQL脚本放在⾥⾯。开发⼈员在合作的时候,A修改了数据库,在B遇到问题的时候,可能需要交流沟通⼀下,去跑需要的脚本。在项⽬上线的过程中,也是运维⼈员在规定的⽂件夹中,找到需要跑的SQL脚本。运⾏它们。Flyway等migration⼯具就是要把开发⼈员和运维⼈员从以上这些场景的繁琐⼯作中解放出来,如果使⽤maven的话,那么在项⽬编译(SpringBoot运⾏Application)的时候,SQL数据库的改动就⾃动进⼊数据库,只要启动成功,开发或者运维⼈员对SQL数据库的migrate过程是⽆感知的,项⽬依然可以照常运⾏。Flyway是什么?

Flyway是⼀个简单开源数据库版本控制器(约定⼤于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它⽀持SQL(PL/SQL、T-SQL)⽅式和Java⽅式,⽀持命令⾏客户端等,还提供⼀系列的插件⽀持(Maven、Gradle、SBT、ANT等)。Flyway最核⼼的就是⽤于记录所有版本演化和状态的MetaData表,Flyway⾸次启动会创建默认名为SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要执⾏的sql脚本等;

feign decodeexception unrecognized field -回复

feign decodeexception unrecognized field -回复

feign decodeexception unrecognized field -回复

题目:"Feign DecodeException: Unrecognized Field" 详解

引言:

在开发过程中,我们常常使用 Feign 作为一个声明式的 HTTP 客户端,以便于调用其他服务的 API 接口。然而,有时候我们可能会遇到一个名为 "DecodeException: Unrecognized Field" 的异常。本文将详细介绍此异常的原因、解决办法以及一些相关的最佳实践,以帮助开发者更好地处理此问题。

第一部分:Feign解码异常 DecodeException

1.1 异常的产生原因

Feign 的任务是将 HTTP 的请求转换为 Java 对象,并将响应转换为相应的结果。但是,当服务器返回的响应数据与我们定义的 Java 对象模型不匹配时,就会发生解码异常。Feign 将会抛出一个 DecodeException

并显示 "unrecognized field" 的错误消息。

1.2 异常的常见原因

以下是出现 DecodeException 异常的常见原因:

1.2.1 服务器返回了一个字段,而该字段在我们的 Java 对象模型中未定义。

1.2.2 Java 对象模型中缺少字段,而服务器返回了该字段。

1.2.3 Java 对象模型与实际返回数据的类型不匹配。

1.2.4 服务器返回了一个复杂的 JSON 对象,而我们的 Java 对象模型只是简单的 POJO 类。

第二部分:解决办法

2.1 编辑 Feign 的契约

通过自定义 Feign 的契约(Contract)来解决 DecodeException 异常是一种常见的做法。契约允许我们自定义对接口方法的解析方式。

2.1.1 创建契约实现类

创建一个类,实现 `feign.Contract` 接口,并重写

`parseAndValidatateMetadata` 方法。

Springboot如何利用拦截器拦截请求信息收集到日志详解

Springboot如何利⽤拦截器拦截请求信息收集到⽇志详解⽬录

1、需求

2、问题

2、获取

1)导⼊依赖为了获取客户端类型、操作系统类型、ip、port

2)封装获取body字符串的⼯具类

3)拦截器类

4)继承 HttpServletRequestWrapper类

5)过滤器类

6)拦截器过滤器配置类总结

1、需求

最近在⼯作中遇到的⼀个需求,将请求中的客户端类型、操作系统类型、ip、port、请求⽅式、URI以及请求参数值收集到⽇

志中,⽹上找资料说⽤拦截器拦截所有请求然后收集信息,于是就开始了操作:

2、问题

试了之后发现当请求⽅式为POST,前端发送数据json时只能⽤request.getReader()流获取,⾃信满满从流中获取之后发现请

求之后报错:

getInputStream() has already been called for this request...

于是⽹上找答案,发现是ServletRequest的getReader()和getInputStream()两个⽅法只能被调⽤⼀次,⽽且不能两个都调⽤。

那么如果Filter中调⽤了⼀次,在Controller⾥⾯就不能再调⽤了。

然后⼜开始找解决⽅法,说既然ServletInputStream不⽀持重新读写,就把流读出来后⽤容器存储起来,后⾯就可以多次利⽤

了。

于是继承 HttpServletRequestWrapper类(http请求包装器,其基于装饰者模式实现了HttpServletRequest界⾯)并实现想要

重新定义的⽅法以达到包装原⽣HttpServletRequest对象。还需要在过滤器⾥将原⽣的HttpServletRequest对象替换成我们的

RequestWrapper对象。

测试发现POST请求参数值可以在拦截器类中获取到了,本以为⼤功告成,⼜发现GET请求不好使了,开始报错Stream

closed,⼀顿操作发现需要在过滤器进⾏判断,如果是POST请求⾛⾃⼰的继承的HttpServletRequestWrapper类请求,否则

Java线程池详解(图解)

Java线程池详解(图解)

来源:/p/098819be088c

拓展:

⼿动创建 new ThreadPoolExecutor 的使⽤:

https:///a/1190000011527245

https:///dweizhao/article/details/78603277 : 销毁、⽴即停⽌

前⾔

Java中的线程池⼗分重要,⽆论是在实际应⽤中还是应对⾯试

⼀、线程池原理

1.1 使⽤线程池的好处

第⼀:降低资源消耗。通过重复利⽤已创建的线程降低线程创建和销毁造成的消耗。

第⼆:提⾼响应速度。当任务到达时,任务可以不需要等到线程创建就能⽴即执⾏。

第三:提⾼线程的可管理性。线程是稀缺资源,如果⽆限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使⽤线程池可以进⾏统⼀

分配、调优和监控。

1.2 线程池的实现原理当向线程池提交任务后,线程池会按下图所⽰流程去处理这个任务

1)线程池判断核⼼线程池⾥的线程是否都在执⾏任务。如果不是,则创建⼀个新的⼯作线程来执⾏任务。如果核⼼线程池⾥的线程都在执

⾏任务,则进⼊下个流程。

2)线程池判断⼯作队列是否已经满。如果⼯作队列没有满,则将新提交的任务存储在这个⼯作队列⾥。如果⼯作队列满了,则进⼊下个流程。

3)线程池判断线程池的线程是否都处于⼯作状态。如果没有,则创建⼀个新的⼯作线程来执⾏任务。如果已经满了,则交给饱和策略来处

理这个任务。

对应到代码层⾯就是ThreadPoolExecutor执⾏execute()⽅法。如下图所⽰:

1)如果当前运⾏的线程少于corePoolSize,则创建新线程来执⾏任务(注意,执⾏这⼀步骤需要获取全局锁)。

2)如果运⾏的线程等于或多于corePoolSize,则将任务加⼊BlockingQueue。

3)如果⽆法将任务加⼊BlockingQueue(队列已满),则创建新的线程来处理任务(注意,执⾏这⼀步骤需要获取全局锁)。

top命令查看线程信息和jstack使用介绍

top命令查看线程信息和jstack使⽤介绍

top -Hp pid可以查看某个进程的线程信息

-H 显⽰线程信息,-p指定pid

jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使⽤选项-F强制打印dump信息jstack -F pid

jstack定义: jstack是java虚拟机⾃带的⼀种堆栈跟踪⼯具。⽤于⽣成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每⼀条线程

正在执⾏的⽅法堆栈的集合,⽣成线程快照的主要⽬的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待

等。

PS : 在实际运⾏中,往往⼀次 dump的信息,还不⾜以确认问题。建议产⽣三次 dump信息,如果每次 dump都指向同⼀个问题,我们才确定问题的典型性。也就是多进⾏⼏次线程快照,观察变化,查看问题所在。

Linux top命令中CPU信息的详解(转)

如何使⽤jstack分析线程状态?

jstack Dump ⽇志⽂件中的线程状态

dump ⽂件⾥,值得关注的线程状态有:

1. 死锁,Deadlock(重点关注)

2. 执⾏中,Runnable

3. 等待资源,Waiting on condition(重点关注)

4. 等待获取监视器,Waiting on monitor entry(重点关注)

5. 暂停,Suspended

6. 对象等待中,Object.wait() 或 TIMED_WAITING

7. 阻塞,Blocked(重点关注)

8. 停⽌,Parked

下⾯我们先从第⼀个例⼦开始分析,然后再列出不同线程状态的含义以及注意事项,最后再补充两个实例。

综合⽰范⼀:Waiting to lock 和 Blocked

实例如下:"RMI TCP Connection(267865)-172.16.5.25" daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd4f8684000]

Java汉字转拼音pinyin4j用法详解

Java汉字转拼⾳pinyin4j⽤法详解

⼀、⼯具介绍

pinyin4j 是⼀个⽀持将简体和繁体中⽂转换到成拼⾳的Java开源类库;

1. 功能⽀持同⼀汉字有多个发⾳还⽀持拼⾳的格式化输出,⽐如第⼏声之类的,

同时⽀持简体中⽂、繁体中⽂转换为拼⾳…使⽤起来也⾮常简单。下⾯是其官⽅⽹址,其中提供了下载:

pinyin4j的官⽅下载地址

2. ⽬录结构及说明

doc : pinyin4j的api⽂档

lib : pinyin4j的jar包

src: pinyin4j的源代码

CHANGELOG.txt : pinyin4j的版本更新⽇志

COPYING.txt : LICENSE说明

README.txt : pinyin4j的概要介绍

3. 原理

pinyin4j使⽤了⼀个.txt的⽂本⽂件(uicode_to_hanyu_pinyin.txt)⽤来存储汉字unicode编码与拼⾳的对应关系,通过读取该

配置⽂件达到转换的⽬的。

该属性⽂件存储信息的基本格式如下:89E3 (jie3,jie4,xie4) //(对应汉字”解”)89E3 是汉字对应的unicode编码的16进制数,

(jie3,jie4,xie4)是该汉字对应的三种读⾳(在汉语⾥有多⾳字)

说明pinyin4j⽀持多⾳字的处理pinyin4j的处理过程是这样的:

根据String的toCharArray⽅法得到每个字符(得到”解”字的unicode编码,实际上是35299,由于java中char和String都是

unicode编码的可以直接转为int型的编码数据35299),然后利⽤Integer.toHexString(c1).toUpperCase()将其转换成16进制数

[也就是89E3],通过读取配置⽂件得到“解”字的拼⾳(jie3,jie4,xie4),那么这⾥有三个拼⾳,pinyin4j的默认取值为第⼀个,也

就是jie3[表⽰读jie,声调是三声]

⼆、pinyin4J 使⽤

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档