自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (2)
  • 收藏
  • 关注

原创 java中方法重载时,可变参数方法和定长参数方法调用的优先级

这是以前的一个面试题,虽然当时我回答了会优先调用定长参数方法,但是自己也不确定,后面用代码验证了一下,这里也记录一下:代码:public class MethodTest { public void sayHello(String... args) { System.out.println("hello,可变参数!"); } public void sayHello(String args, String str) { System.out.println("hello,定长参数!

2021-03-25 11:02:35 65

原创 使用TransmittableThreadLocal弥补InheritableThreadLocal的不足,可动态刷新线程变量

众所周知,使用InheritableThreadLocal可以实现父子线程之间的值传递,不过使用InheritableThreadLocal有一个隐藏的问题,子线程在创建的时候会从父线程InheritableThreadLocal中拷贝数据,一旦子线程创建成功以后,父线程更新了数据,对子线程是无效的,这种情况在使用线程池的时候会有数据不安全的问题,下面使用代码演示一下:public class ITLTest { // 声明一个线程池 private static final Execut

2021-02-09 11:48:51 94 1

原创 MyBatis的Mapper.xml文件中关于字符串的判断写法

在mybatis的Mapper.xml文件中,如果需要在<if>标签中判断字符串是否相等,是不能使用:<if test="str == '0'"></if>这种方式的。解决方式有两种:使用toString()方法:<if test="str == '0'.toString() "></if>使用单引号嵌套双引号的方法:<if test='str == "0" '></if>...

2021-01-26 10:37:48 506

原创 使用C#实现一个可以预览图片,并且可以对图片进行自由裁剪预览的照相客户端

一、前言最近系统需要优化照相客户端,最开始的拍照客户端是使用浏览器插件实现的,不过兼容性不太好,然后使用java写了一款客户端,感觉还是有点臃肿,最近优化系统,决定重新使用C#实现了一个拍照客户端。二、功能演示:启动拍照客户端:客户端启动以后,会默认选择第一个照相设备打开,你可以自由选择照相设备,如果是后插入照相设备,点击【刷新】按钮即可。拍照:点击【拍照】按钮,会进入刚刚拍摄的照片的预览界面,左侧是原图,右侧默认是原图按照一寸照片的缩放。如果你想裁剪图片,可以拖动红色的矩形框,然后

2021-01-22 08:49:58 129

原创 Java web项目中使用C#配合开发,实现双屏显示功能

一、前言最近系统开发中,新增了一个需求,要求客户登记以后,需要有一个对外的屏幕显示客户登记信息,方便客户确认个人信息及相关信息是否有误。在了解相关需求以后,我打算使用C#来配合实现双屏显示功能。作为一名java程序员,在使用C#开发过程中,感觉也挺有意思的,特此,简单记录一下实现思路。二、代码实现java服务端创建一个spring boot项目,项目结构如下:导入maven依赖: <dependency> <groupId>or

2021-01-20 17:47:19 165

原创 Windows系统对外开放指定端口

最近在远程部署系统的时候发现,系统部署完毕以后,oracle数据库却连不上了,数据库服务器网络没有问题,可以ping通,可就是连不上,最后猜测可能是数据库服务器没有对外开放1521端口,在打开端口以后,顺利连接,这里记录一下解决过程。打开控制面板:查看网络状态和任务:进入Windows防火墙设置:进入防火墙高级设置:创建入站规则:规则类型选择端口:设置连接类型和特定端口:设置连接条件:设置该规则应用时机:设置规则名称,点击【完成】

2021-01-07 09:35:20 263

原创 2020年终简结——人生没有白走的路,每一步都算数

拖到现在才写2020年的年终总结,其实也没有什么特别的原因,主要就是因为懒。自己抽空看了一下,2019年简结,发现其实差别不大,甚至可以换个标题重新发一次。开个玩笑,开个玩笑,不过怎么说,2020年都是及其特殊的一年,不管对于世界来说,还是我来说,...

2021-01-06 21:10:38 93

原创 同一条SQL语句,MyBatis 查询结果与 MySQL 执行结果居然不一致!

一、前言不知道大家平时在开发过程中有没有遇到这样的问题,同一条SQL语句,MyBatis 查询结果与 MySQL 执行结果居然不一致,具体说应该是MyBatis 查询结果比MySQL 执行结果的数据更少。不要不相信,如果不注意,这样的坑,你还真有可能会踩的。二、代码演示下面用代码简单演示一下:创建两张表用于测试用:teacher表:CREATE TABLE `teacher` ( `id` int(11) NOT NULL, `name` varchar(255) CHARAC

2020-12-16 16:12:56 1063 1

原创 谷歌浏览器安装JSON格式化插件简单教程

在平时的开发中,老是会测试使用浏览器访问URL返回json格式数据的情况,由于原生的浏览器显示的json格式数据结构不清晰,不便于查看,因此可以使用第三方插件,格式化显示的json数据,方便查看。下载JsonView扩展程序压缩包:github下载地址直接下载Zip压缩包就好:解压JSONView-for-Chrome-master.zip压缩包:在谷歌浏览器的扩展程序界面添加JsonView扩展程序:浏览器地址栏输入:chrome://extensions/查看开发者模式是否

2020-12-16 14:37:32 122

原创 spring boot 2.x整合websocket——服务器端和客户端开发

一、前言WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。最近做的系统中,也涉及到websocket的使用,打算在这里记录一下

2020-12-07 15:21:05 46

原创 spring boot 2.x 使用mybatis拦截器实现系统日志记录(将完整参数的SQL语句记录到数据库中)

一、前言最近要求做系统的全局日志记录功能,要求把执行的完整SQL语句保存到数据库中,在实际开发中最终放弃了使用AOP的方法,改由使用mybatis的拦截器实现,这里简单记录一下实现过程。系统数据库主要环境:数据库:MySQL数据源:DruidDataSource二、创建数据库用表这里只是简单演示一下实现过程,只用两张表模拟一下:用户表(user)CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `age` int(11) NUL

2020-12-04 16:37:40 472

原创 RequestContextHolder跨线程获取不到request对象,解决方法

一、前言最近在做一个系统的全局日志拦截记录功能,有一个需要记录的IP地址的信息,我是从HttpServletRequest对象中获取的,但是我发现如果使用线程池以后,记录日志信息会报错,主要是获取不到HttpServletRequest对象。下面使用代码简单演示一下问题和解决方法:二、代码演示创建一个spring boot项目,项目结构如下:2. 导入maven依赖: <dependency> <groupId>org.spri

2020-12-03 11:38:41 914 2

原创 spring boot2.x 使用validator进行数据校验以及扩展自定义参数校验

一、前言在平时开发中,前端提交表单时,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,不过这样的验证是否就足够了呢,答案肯定是否定的。一个可靠的系统,不仅仅要依靠前端的数据验证,后端的验证也是必不可少的。以前验证数据的合法性,需要通过写大量的if…else…条件判断,有没有更简便快捷的方法呢,答案是有的,就是使用validator进行数据校验。spring boot的validation模块已经为我们提供了许多默认直接可以使用的注解,注意:spring boot2.3.x以后版本需要

2020-11-19 18:04:18 471

原创 spring boot2.x 自定义事件的发布与监听

一、前言需要实现spring boot自定义事件的发布与监听,其实并没有多复杂,可以分以下三步进行:通过继承抽象类ApplicationEvent,自定义事件;通过实现 ApplicationListener接口 或者通过 @EventListener 注解到方法上,自定义一个事件的监听;通过ApplicationContext对象,发布事件。二、代码实现创建一个spring boot项目,项目结构如下:2. 导入maven依赖: <dependency>

2020-11-19 10:47:48 116

原创 spring boot2.x 如何巧妙的自定义@EnableXXX模块装配功能

一、前言在平时使用spring boot的时候,很多时候都会用到@EnableXXX的注解,来装配一些功能模块,有代表性的,比如:@EnableWebMvc 开启Web MVC的配置支持;@EnableCaching 开启注解式的缓存支持。如果,想自定义实现这些功能,我们应该怎么做呢?先看一下spring boot是怎么帮我们做的。@EnableWebMvc(采用基于注解驱动方式)@Retention(RetentionPolicy.RUNTIME)@Target({ElementTy

2020-11-13 12:27:33 101

原创 spring boot2.x 后端参数校验+统一异常处理+后端自定义全局统一接口返回响应数据格式

一、前言这篇博客主要介绍以下几个方面:通过Validator来方便快捷地完成参数的校验工作;通过全局异常处理来完成异常操作的规范;通过数据统一响应来完成响应数据的规范;通过自定义注解,过滤返回的响应体是否需要进行统一包装。二、搭建spring boot项目项目结构如下:三、导入maven依赖 <dependency> <groupId>org.springframework.boot</groupId>

2020-11-11 14:31:49 319 2

原创 HttpMessageNotWritableException: No converter found for return value of type,可能出现的原因及解决方法

首先,演示一下出现的情况,创建一个实体类,代码如下:public class User2 { private Long id; private String username; public User2() { } public User2(Long id, String username) { this.id = id; this.username = username; }}使用spring mvc的代码,向

2020-11-11 09:09:20 953 4

原创 如何使用java代码实现使用默认浏览器打开网页,java中Desktop类的介绍与使用

Desktop类在java中是jdk1.6以后新增的,在java.awt包下,它的主要功能有:启动用户默认的浏览器显示指定的URI链接;启动用户默认的邮件客户端发送URI指定的邮件;启动一个注册应用程序(本地安装了的应用程序)去打开,编辑或打印一个指定的文件。下面使用代码简单演示一下:使用默认浏览器打开网页public class DesktopTest { public static void main(String[] args) { // 使用默认浏览器打开网页 Desk

2020-11-05 15:09:26 99

原创 如何使用java代码获取屏幕显示器个数

使用java代码获取屏幕显示器个数,主要是使用java中的GraphicsEnvironment对象,关于GraphicsEnvironment对象的介绍,可以去GraphicsEnvironment文档介绍页面看一下:下面使用代码测试一下:public class ScreenTest { public static void main(String[] args) { // 创建GraphicsEnvironment对象 GraphicsEnvironment g = Graphics

2020-11-05 14:53:11 259

原创 使用tomcat搭建一个本地图片服务器,用Spring Boot工程上传图片并及时显示

一、使用tomcat搭建本地图片服务器准备一个tomcat服务器:2.进入conf目录下,修改server.xml文件中的相关端口:停止服务端口8005 <Server port="8065" shutdown="SHUTDOWN">HTTP端口8080 <Connector port="8765" protocol="HTTP/1.1" connectionTimeout="20000"

2020-11-04 12:10:29 243 2

原创 InheritableThreadLocal的理解与应用

前面使用一篇博客介绍了ThreadLocal的理解与应用,不过ThreadLocal只能实现在同一个线程中进行值传递,不能实现父子线程之间的值传递,如果想要实现父子线程之间的值传递,就需要使用今天的主角——InheritableThreadLocal。先用代码演示一下:ThreadLocalpublic class InheritableThreadLocalTest { private static ThreadLocal<String> tl = new ThreadLo

2020-10-29 16:40:39 110

原创 java8中stream流的常见操作

一、概述Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理

2020-10-29 14:40:50 729

原创 java中SimpleDateFormat线程不安全原因及解决方案

先说结论,在java中SimpleDateFormat日期格式对象是非线程安全的,如果把SimpleDateFormat对象用static关键字修饰,那么在多线程中使用这同一个对象,是有可能会出错的。一、代码演示下面用代码演示一下线程不安全的情况:public class SimpleDataFormatTest { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

2020-10-28 17:57:24 593

原创 使用localStorage实现页面之间通信,一个页面发生变化,另一个页面也同时发生变化

不知道大家在平时开发过程中有没有遇到这种需求,浏览器打开两个窗口,一个发生变化,另一个也要同时发生变化。这种需求怎么实现呢,可以参考使用localStorage实现。简单介绍一下localStorage:在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。loca

2020-10-24 21:42:23 628

原创 maven项目中,引入依赖的另一个项目没有spring管理bean,在当前项目中可以进行bean的装配管理吗?

标题可能把问题阐述的不是很清楚,这里再次说明一下,就是创建一个maven项目作为当前项目,当前项目引入了完整的spring环境,同时当前项目需要引入另外一个项目的依赖,而需要引入的这个项目并没有完整的spring环境,那么引入这个项目依赖以后,此时在当前项目中,可以使用@Autowired注解进行相关bean的装配工作吗?下面进行验证一下:创建一个简单的maven项目,项目结构如下:导入maven依赖,这里很简单,导入一个spring-context的依赖即可: <dependenc

2020-10-20 15:10:03 536

原创 spring boot2.3.X版本找不到hibernate-validator相关注解解决方法

今天使用idea创建了一个spring boot2.3.x版本的spring boot项目,在使用hibernate-validator相关的注解的时候,发现不能导入相关的包:后来在官网找到了相关说明:官网链接官网上也给出了解决方法,手动导入相关依赖就行了,如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-va

2020-10-16 09:55:06 455

原创 XMLParserException: XML Parser Error on line 11: 对实体 “characterEncoding“ 的引用必须以 ‘;‘ 分隔符结尾。解决方法

今天使用mybatis逆向工程生成mysql数据库的代码时,报出了一个异常:org.mybatis.generator.exception.XMLParserException: XML Parser Error on line 11: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。 at org.mybatis.generator.config.xml.ConfigurationParser.parseConfiguration(ConfigurationParse

2020-09-18 16:33:37 544

原创 ThreadLocal的理解与应用

在平时java开发中,如果想使用共享变量,往往使用public static 的方式修饰一个类的成员变量,这样就能实现变量共享了。不过,这样的变量是所有线程都共享的,有没有什么方式可以让这个变量只在某个线程中共享使用呢,答案是有的,可以使用ThreadLocal来解决这个问题。一、ThreadLocal简介hreadLocal类并不是用来解决多线程环境下的共享变量问题,而是用来提供线程内部的共享变量,在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。在线程中,可以通过get()/set()方

2020-09-18 14:01:26 85

原创 java集合——LinkedList(1.8)源码浅析

LinkedList是Java集合框架中List接口一种实现。LinkedList 是有序并且可以元素重复的集合,底层是基于双向链表的。它也可以被当作堆栈、队列或双端队列进行操作。一、继承体系这里使用IntelliJ IDEA生成的体系图,看一下LinkedList 的继承体系:由体系图可以看到,LinkedLis实现了以下接口:实现了Iterable 接口,可以使用迭代器进行遍历;实现了Collection接口,拥有集合操作的方法;实现了List 接口,拥有集合增删改查等方法;实现Deq

2020-09-11 10:33:27 80

原创 Mybatis插入数据时,自动获取自增主键值

在平时开发中,可能会遇到数据库主键是自增的情况,这时我们保存数据时并不需要指定主键,可是很多时候都需要获取保存数据后生成的主键,怎么办呢?mybatis提供了两种方式获取数据库自增主键:在insert标签中使用 useGeneratedKeys、keyProperty、keyColumn 属性获取;在insert标签中嵌套 selectKey 标签获取。下面使用小案例演示一下,这里使用的是MySQL数据库:创建一张测试用的book表,建表语句如下:CREATE TABLE `book`

2020-09-02 11:22:03 484

原创 spring boot2.x版本学习笔记之使用JPA访问MySQL数据库

一、JPA简介JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。JPA 是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。注意: JPA 是

2020-08-25 15:35:16 56

原创 spring boot2.x版本学习笔记之使用mybatis进行多数据源配置访问数据库

首先创建2个用于测试的数据库,每个数据库中都创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGI.

2020-08-24 17:31:51 76

原创 spring boot2.x版本学习笔记之使用mybatis的xml配置方式配合DruidDataSource数据源访问MySQL数据库

首先创建一个用于测试的数据库,创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = In.

2020-08-24 16:18:14 163

原创 spring boot2.x版本学习笔记之使用mybatis注解方式配合HikariDataSource数据源访问MySQL数据库

首先创建一个用于测试的数据库,创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = In.

2020-08-24 15:08:45 245

原创 spring boot2.x版本学习笔记之使用JdbcTemplate进行多数据源配置访问数据库

首先创建2个用于测试的数据库,每个数据库中都创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGI.

2020-08-24 09:41:48 85

原创 java中,@Resource注解和@Autowired注解的区别

平时开发中,我们知道,spring中,@Resource和@Autowired都是可以在bean的注入时使用。这里简单介绍一下@Resource和@Autowired注解:@Resource有两个常用属性name、type,注入时分4种情况:指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常;指定name:通过name找到唯一的bean,找不到抛出异常;指定type:通过tpye找到唯一的bean,如果不唯一,则抛出异常;都不指

2020-08-21 17:09:12 333 1

原创 spring boot2.x版本学习笔记之使用JdbcTemplate访问数据库

首先创建一个用于测试的数据库,创建一张user表,建表语句如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = In.

2020-08-21 11:07:36 56

原创 java中,数值类型变量除以 0 ,一定会报错吗?

在我们惯性思维中,编写java代码时,数值类型做除法运算,除数不能是0,否则程序会抛出异常。那么,有没有列外呢?下面用代码验证一下:整数除以0测试:public static void main(String[] args) { System.out.println("1 / 0=" + 1 / 0); }运行结果:Exception in thread "main" java.lang.ArithmeticException: / by zero at learn

2020-08-20 11:44:57 621

原创 Spring Boot2.x版本使用ECharts动态绘制按时间段显示统计数据

ECharts简介:ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。官网地址:https://echarts.apache.org/zh/index.html接下来,创建一个Spring Boot项目,使用ECharts实现按指定时间段和时间间隔内显示统计数据的

2020-08-18 10:01:20 378

原创 java常见排序算法——快速排序

首先说明一下,此案例中的排序是基于数组升序排列。原理:快速排序是一种排序执行效率很高的排序算法,是由冒泡排序改进而得到的,它利用分治法来对待排序序列进行分治排序,它的思想主要是通过一趟排序将待排记录分隔成独立的两部分,其中的一部分比关键字小,后面一部分比关键字大,然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序。思路:在待排序的数组中任取一个元素(通常取第一个记录)作为基准(基准的选取可能会影响到排序的效率),称为基准记录;定义两个索引 low和 high分别表示

2020-08-17 12:14:01 65

takephotoclient.zip

使用C#实现一个可以预览图片,并且可以对图片进行自由裁剪预览的照相客户端

2021-01-21

pdf24-creator-9.0.1.exe

pdf24-creator-9.0.1安装包。100%免费的PDF创建和PDF转换器适用于所有Windows程序,还有很多您不会预计到从一个免费软件都有提供的功能:从几乎每一个Windows应用程序创建PDF文件、重新排序页面、合并、分割和使用密码来保护您现有的PDF文件。

2019-11-07

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除