Java
文章平均质量分 60
cj96248
程序员,单纯、固执、容易体会到成就感;能够挑灯夜战不眠不休;能够迎难而上挑战自我。
展开
-
正确的逛Github-寻找优秀的中文项目
作为一个程序员,Github是经常光顾的网站之一了。但是,目前 Github还没有专门针对中文的环境,无法直观地找到优秀的中文项目。一个偶然的机会,我发现有一个项目 GitHub-Chinese-Top-Charts,它通过 Github 的 Star 星标机制,帮我们筛选出一大批优秀的中文项目。很多之前收藏过的优秀项目,都在其中,让我觉得该项目的实用性和可信度还是很高的。但是,用的多了,发现也有弊端,榜单的内容不错,但是排版嘛。。。Github 默认的 README 文件基本是没有样式的,还有就是这个原创 2021-08-31 23:59:32 · 3275 阅读 · 0 评论 -
值得深入探索的软件架构
无论我们的项目简单还是复杂,是后台管理应用还是海量用户的高并发应用。我们都在时时刻刻与技术架构为伍,在不同的路上精进。科学与艺术计算机本质上是一门科学,工程师不断地利用这门科学创造现代化的世界,也在创造新的价值。我们以码农自居,却无时无刻不在打磨我们的代码,成为一个匠人。我们在代码中套用各种框架,使用多种设计模式,又一直在演进项目架构。有时候,我们可以自豪地表示,尽管它称之为计算机科学,但它通常是一门艺术。单体与微服务在很长一段时间,我们的应用一直都属于单体应用。因为它足够简单,不需要关注代码以外的原创 2021-07-06 23:37:22 · 1623 阅读 · 2 评论 -
PODAM - Java 对象随机数填充器-属性随机赋值 Mock bean
最近,一个需求让我们接触到了 PODAM,可以自动使用随机数据填充Java 对象原始属性。缘起编写代码过程中,测试代码的广覆盖,往往能保证代码的健壮性。完善的测试用例也能便于后期迭代开发。测试数据增删改查过程中,最常见的莫过于初始化一个对象,然后将其插入到数据库中。于是,下面的代码,就占用了测试代码的大部分篇幅:Street street = new Street();street.setNumber(12);street.setType((byte) 1);street.setName(原创 2021-06-30 18:52:10 · 3172 阅读 · 0 评论 -
log4j2 将特定级别 INFO 日志打印到文件
本文要解决的是如何将 mybatis 的 sql 日志打印到特定文件问题。业务场景在使用 mybatis-plus 的时候,我们有时需要将 SQL 打印到控制台,便于排查代码问题。Mybatis-plus 需要通过下面的方式开启控制台 SQL 日志打印:mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl看起来确实没问题,但是。日志仅仅只能打印到控制台,而在项目上线初期,我原创 2021-05-31 16:37:18 · 4420 阅读 · 1 评论 -
mybatis-plus 开启与关闭 SQL 日志打印
开启打印Mybatis-plus 需要通过下面的方式开启控制台 SQL 日志打印mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl对于 application.properties 文件,可以通过下面的方式关闭:mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl关闭原创 2021-04-13 19:36:33 · 60196 阅读 · 5 评论 -
JPA启示录-构建 JAP 基础工程
在“一无所有”的情况下,需要从下面几个方面考虑搭建一个基础项目。因素结论项目基本结构参考开源 Cola 的项目结构项目技术选型SpringBoot2 + JPA数据库选型MySQL 8.x项目部署Docker容器化项目启动使用 Mybatis 开发时,我们常常先创建好表,然后逆向工程,生成基础的增删改查代码。本次项目尝试采用 DDD 的领域驱动开发方式,着重关注领域模型,数据库表利用项目工程生成。基础建设一般在设计商业化系统的时候,都会考虑公共字原创 2021-03-31 21:57:42 · 237 阅读 · 1 评论 -
JPA启示录-该如何搭建好一个JPA项目
公司最新的项目在技术选型的时候,选择使用 JPA 最为数据映射的解决方案。由于之前对 Mybatis 更熟悉,因此,在搭建整个项目的时候,也对 JPA 有了更进一步的学习和认知。为何选择 JPA 而不是 MybatisJPA 是完全的 ORM 框架,对象、关系映射能力极强,数据库无关性比较好,用好 JPA 可以不用写 SQL 而减少大量的代码开发,后期维护性也比较好。当然现在 Mybatis 大行其道也不是不无道理,它对模型的要求不高,上手难度较低,能适应需求多变的各种场景。怎样认识 JPA 与 H原创 2021-01-31 23:08:44 · 252 阅读 · 0 评论 -
sonarQube 整合Gitlab 的 SSO 插件单点登录
前言 sonarqube 支持多种认证登录方式,如果使用自带的账号体系,需要管理员一个个添加账号,使用起来多有不便。不过一般公司都部署了私有化的 Gitlab,我们可以利用私有的 gitlab 账号来登录 Sonarqube。获取插件方式一如果你的 sonarQube 可以访问外网,直接使用管理员账号登录 sonarqube,在线安装插件。方式二或者可以去下载 jar 包。方式三要是都不行,还可以直接去下载源码,编译。Github 地址:sonar-auth-gitlab-plugin下载原创 2020-10-17 22:09:35 · 6034 阅读 · 7 评论 -
Maven Plugin fork 在 pom.xml中的作用
使用Spring-boot 的热加载 devtools开发工具时,团队中有些同事的电脑会不生效。无意中发现有人给了这样一个解决方案: <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>原创 2020-09-30 10:29:25 · 18274 阅读 · 8 评论 -
Java WeakHashMap指南
概述在这篇文章中,我们将探索 java.util 包中的WeakHashMap。为了理解数据结构,我们将在这里使用它来推出一个简单的缓存实现。但是,请记住,这是为了了解地图的工作原理,并且创建自己的缓存实现几乎总是一个坏主意。简而言之,WeakHashMap是Map接口的基于哈希表的实现,其键为WeakReference类型。当WeakHashMap中的某个条目不再被普通使用时,该条目将被自动删除,这意味着没有单个Reference 指向该键。当垃圾回收(GC)进程丢弃某个键时,其条目将有效地从映射原创 2020-08-31 22:28:12 · 325 阅读 · 0 评论 -
Java异步编程该从何谈起
Java异步编程该从何谈起标签(空格分隔): Java从开始接触编程,我们早已悉知并熟练运用同步编程的思想。代码一行一行地写,一行一行地读,一行一行地调试。在很长一段时间里,都没能认清楚异步编程的存在,因为所有的场景都不需要借助到异步编程。直到,性能问题凸显。Java已经提供了很多种方式解决性能问题,其中最被人关注到就是并发编程。在JDK并发包中,提供了非常多的并发解决方案。对于多线程...原创 2020-01-09 20:45:28 · 892 阅读 · 0 评论 -
是时候深入了解JVM了
刚开始接触Java时,对JVM是无知的,确实,是无感知的。因为Java的设计者,为了降低语言的复杂度,屏蔽实现细节,将很多背后的操作"隐藏"了。在很长时间里,不需要了解Java虚拟机,也能写出可以运行的代码,甚至完美地运行一个Java程序。什么垃圾回收机制,类加载机制统统都抛之脑后,好像也没人说你不懂Java。直到…一次OOM的出现。解决Bug的能力与手段,决定了你想成为程序员还是好程序员。...原创 2019-12-13 23:27:29 · 751 阅读 · 0 评论 -
eclipse ssh连接服务器RSEF1002
出现Operation failed. File system input or output error一般解决步骤Eclipse中有一个功能可以使用SSH链接到其他服务器。某次链接时,出现异常:异常描述:Operation failed. File system input or output error不是很清楚具体的问题,再展开详细描述:错误信息:Message repo...原创 2019-09-22 20:08:56 · 813 阅读 · 0 评论 -
Java并发编程基础
此文记录了自己学习Java并发编程的基础知识,其中的图示并非原创。并发同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替换入或者换出(上下文切换),外界看这些线程是同时存在,每个线程都处于某种状态,如果运行在多核处理器上,程序中的线程将分配到各个处理器核上,也可以同时运行。多个线程操作相同的资源,保证线程安全(合理使用资源)高并发 High Concurrency...原创 2019-02-19 23:07:12 · 1022 阅读 · 0 评论 -
Spring 的异步HTTP请求AsyncRestTemplate
如果你是第一次看到这篇文章,那么我建议你先去看一下上一篇《Spring 的异步HTTP请求AsyncRestTemplate》还是那个套路熟悉使用RestTemplate的,不会觉得AsyncRestTemplate很难,因为的确很相似。在Spring 看来,你只管写同步的代码,异步的执行交给它处理就可以了。配置依旧在默认的有时难以满足多变的需求,于是配置自定义参数排上用场: @Be...原创 2019-01-30 23:02:04 · 16232 阅读 · 0 评论 -
Spring 的异步HTTP请求调用AsyncRestTemplate
业务场景基于HTTP的请求调用是一种常见的数据交互方式,Java也有很多类库可以实现HTTP请求调用,在大多数时候,它们是都同步调用。如果请求响应比较慢,甚至请求超时,程序就必须等到请求返回以后才能继续执行,在某些场合下,我并不需要等待请求的结果,或者我不关心请求是否执行成功,需要继续执行之后的逻辑,就需要通过异步处理。在 Spring 3 时代,为了能更优雅地实现HTTP调用,引入了 Res...原创 2019-01-29 23:34:06 · 14091 阅读 · 4 评论 -
Java的8个Java日志工具
摘要 : 本文要来分享一些Java程序员最常用的Java日志框架组件。日志工具log4j – 最受欢迎的Java日志组件Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位地掌控...原创 2018-06-28 23:49:47 · 6891 阅读 · 0 评论 -
Java 日志框架Log4j简介、历史
log4j2,是log4j的升级版本,发布于2014年7月。 与第一代log4j不同的是,log4j2完全重写了log4j的日志实现。 log4j2主要解决的是Log4j的遗留问题:性能与扩展性。 log4j2中,引入了异步logger,使得log4j2的性能得到了巨大的提升。 Log4j基于插件的软件架构开发,使得Log4j2更易于扩展,而不需会改变Log4j2自身的功能。 Log4j...原创 2018-06-30 23:59:15 · 1222 阅读 · 0 评论 -
Java 日志框架Log4j简介、历史
Log4j简介Log4j 是基于Java开发的日志框架,其作者Ceki Gülcü将Log4j捐献给了Apache软件基金会,使之成为了Apache日志服务的一个子项目。 Log4j虽然是Java日志服务,因其出色的表现,被孵化出了支持C, C++, C#, Perl, Python, Ruby等语言的子框架。 Log4j早在1996年就被创立,之后经过改进与增强,正式对外发布。 201...原创 2018-06-29 22:44:34 · 1860 阅读 · 0 评论 -
Java 日志框架
摘要: 在Java中工程中,输出日志需要使用一个或者多个日志框架,这些框架提供了必要的对象、方法和配置来传输消息。java.util.logging在JDK 1.4 版本之后,提供了日志的API ,可以通过简单的配置处理日志。Log4jLog4j是Apache的一个开放源代码项目,使用了Log4j的程序会在项目目录中寻找一个名为 log4j.properties 的文件。Log...原创 2018-05-31 22:34:21 · 309 阅读 · 0 评论 -
Spring NoSuchBeanDefinitionException原因分析
摘要:本文译自Eugen Paraschiv文章Spring NoSuchBeanDefinitionException 原文链接: http://www.baeldung.com/spring-nosuchbeandefinitionexception 感谢Eugen Paraschiv对此所做的研究。概述在本文中,我将通过实例向你展示Spring 中org.springframew翻译 2016-06-05 11:18:15 · 156381 阅读 · 12 评论 -
solr6使用solrJ做XML数据导入
摘要: Solr6.0的solrJ接口有部分变化,我将使用SolrJ的API,把一段XML文档数据插入到Solr数据库中。需要的软件支持JDK1.8以上Solr6.0Eclipse 4.5solr-solrj-6.0.0.jardom4j-1.6.1.jarXML文档转换为Java对象我准备了一段XML数据,保存在cd.xml文档中。<CATALOG> <CD> <TIT原创 2016-10-09 16:04:01 · 2879 阅读 · 0 评论 -
Solr6使用SolrJ导入JSON数据
摘要: 之前,曾讨论过如何使用SolrJ将XML文件数据导入到Solr数据库,参见http://blog.csdn.net/jiangchao858/article/details/52766017。这次,使用的数据结构是JSON,解析过程将更为简单。需要的软件支持JDK1.8以上 Solr6.0 Eclipse 4.5 solr-solrj-6.0.0.jar dom4j-1.6.1.ja原创 2016-10-16 22:14:37 · 5545 阅读 · 3 评论 -
Java函数式编程
摘要: 在Java重构的过程中,巧妙的运用函数式思想能够便捷地去掉重复。函数式编程是声明式的。也就是说,她应该指定“什么要做”而非“怎么做”。这种方式使得我们可以工作更高的抽象层次。而传统的过程式以及面向对象的语言,则是命令式的,因而更关注于“怎么做”这个层面。站在面向对象思想的角度来看,函数式编程将函数看成一等公民的思想,使得我们处理的粒度从类变小为函数,从而可以更好地满足系统对重用性和扩展性的支原创 2017-02-26 23:08:52 · 10245 阅读 · 6 评论 -
Java8 新特性概述(60%)
摘要: Java8在2014年已经发布,现在已经逐渐被广大开发者所认同,越来越多的框架选用,越来越多的公司选择Java8,经过一段时间的学习,发现Java的一些改动值得学习。特性简介速度更快 Java8优化了垃圾回收机制,对底层的内存结构进行了升级,永久区被移除,用元空间代替(直接使用物理内存,而不是分配内存,OOM异常减少),MaxPremGenSize使用MaxMetaspaceSize。J原创 2017-06-24 17:25:59 · 699 阅读 · 0 评论 -
MapStruct实体间转换
摘要: 在实际项目中,我们经常需要将PO转DTO、DTO转PO等一些实体间的转换。比较出名的有BeanUtil 和ModelMapper等,它们使用简单,但是在稍显复杂的业务场景下力不从心。MapStruct这个插件可以用来处理domin实体类与model类的属性映射,可配置性强。建立Maven项目MapStruct需要醒目构建工具(如Maven)支持,如果项目结构不标准,可能无法生成对应的转换类。原创 2017-08-23 22:52:51 · 4395 阅读 · 1 评论 -
MapStruct处理Java中实体与模型间不匹配属性转换
摘要: 前面介绍了MapStrut简单用法,MapStrut的最重要的特点就是处理Java中实体与模型间不匹配属性的转换。实体模型有一个User对象:public class User { private Integer id; private String name; private double account; private boolean married;原创 2017-08-26 23:27:39 · 17857 阅读 · 5 评论 -
MapStruct处理Java中枚举Enum类型使用与举例
摘要: MapStruct更擅长的是处理特殊情形下的java bean间转换,如Java中的枚举Enum类型转换。在学习了MapStruct简单使用方法之后,可以探索更复杂的业务情形。常规枚举Enum转换实体模型有一个User对象,其属性等级(grade)是一个枚举类型:public class User { public enum Grade{ AVERAGE,BRONZE,原创 2017-08-27 23:15:38 · 16055 阅读 · 0 评论 -
MapStruct处理Java实体的高级进阶使用
摘要: MapStruct有很多的配置选项,除了使用target和source外,还有一些注解选项可以实现更高级的功能。defaultValue有时候,在转换过程中,可能因为空值或其他原因使得映射结果不正确,此时可以指定一个默认值,防止程序出错。@Mappings( { @Mapping(target = "age", source = "evage", defaultValue原创 2017-08-28 23:26:35 · 18669 阅读 · 0 评论 -
struts2 异常Unable to load bean 文件struts-default.xml
摘要: 项目中需要升级struts到struts2.5.14.1,这个版本有较大的改动,于是出现了较多的jar包冲突。很郁闷的是,很多问题在jetty服务器下,才会发生。日志的处理struts2.5.14.1的日志使用了log4j2的配置,如果项目中没有用到log4j,可能需要在引入struts的pom配置中exclude相关的日志处理包。并且在项目的合适位置引入log4j2.xml的配置文件。关于原创 2017-12-20 23:28:10 · 3249 阅读 · 2 评论 -
Lucene深入学习(9)Lucene的索引方式Directory
Tips 示例代码基于Lucene 6.2.1.Directory创建索引时,必须要用到,而它只有一个构造函数: public IndexWriter(Directory d, IndexWriterConfig conf) 这里的Directory是必须的。Directory是Lucene内部自定义的目录类型,它本身是一个抽象类,在Lucene自带的工具包中,Directory有两个子类,分别原创 2017-12-26 22:40:01 · 2038 阅读 · 0 评论 -
Java 10 想说爱你不容易
没有跳票的Java10 如约而至,反而让人有点不习惯了,那这次的版本迭代能否给开发者带来惊喜呢?局部变量类型推断Java 7 引入了菱形操作符: List<String> list = new ArrayList<>(); 这个类型推断使得我们可以省略部分重复操作,但是还需要很多看似重复的代码。为此,Java 10 引入了var 变量来减少冗余。 于是乎,你可以写这样的代码: var l原创 2018-04-24 23:11:26 · 316 阅读 · 0 评论 -
在Linux上安装Java 10
摘要: 想要尝鲜Java 10,又不想在自己机器上安装,于是在虚拟的Linux上安装了Java 10. 使用Ubuntu 14.04系统。1.下载Linux的安装包OpenJDK 10 . 不到200M的压缩包。 或者Oracle官方版本: 2.解压安装包tar xzvf openjdk-10_linux-x64_bin.tar.gz3.将安装包移动到之前安装其他JDK的目录(方便管理原创 2018-04-25 23:16:43 · 1611 阅读 · 0 评论 -
java10 特性指南
2018年3月20号,java10如期发布,主要的特性包括局部变量的类型推断,增强的垃圾收集器,编译优化。Java 10 前世Oracle在2017年宣布,采用敏捷开发的模式推进Java发展,Java的新版本每6个月发布一次。Oracle还希望之后的Java以发布时间命名,比如这次的Java版本起名Java 18.3 , 不过,反对开发者声强烈,Oracle目前还没有强制推行这一制度。JDK 10原创 2018-04-26 23:27:33 · 388 阅读 · 0 评论 -
Java 日志体系总览
摘要: Java的日志系统,对于项目的运行状态监控和行为分析有着至关重要的作用,很难想象没有任何日志记录功能的应用程序被运行于生产环境中。目前的Java日志收集有非常多的日志框架,如果能了解它们之间的联系与区别,在使用时方能得心应手。纷繁复杂的 jar 包log4j、log4j-api、log4j-corelog4j-1.2-api、log4j-jcl、log4j-slf4j-im...原创 2018-05-30 23:31:01 · 988 阅读 · 0 评论 -
Java日志综述(必要性分析)
摘要: 在Java项目中,日志的有无不会影响项目的正确结果,但是没有日志的项目可以说是不完整的。日志作用调试在Java项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。如果你大量使用System.out或者System.err,我承认这是一种最方便最有效的方法,我在刚接触这门语言的时候也时常这么做,只是这种方式显得不够专业。定位错误...原创 2018-05-31 22:22:23 · 3237 阅读 · 0 评论 -
Java 设置JAVA_HOME无效
摘要:如果你的电脑装有不止一个java环境,但是设置JAVA_HOME无效时,可以参考我的方法。背景我的电脑是win7 64位系统,之前学习java时安装了java 7 配置了JAVA_HOME为64位的jdk 7 快速进入环境变量的方法: 点击win的start按钮 在搜索框中输入env,即可快速定位到环境变量选项 用cmd打开窗口,运行java -version ,可以知道当前运行的ja原创 2016-05-02 15:48:19 · 14634 阅读 · 1 评论