JAVA

15 篇

利用 JEXL 动态计算表达式

定义

Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来校验数据。

背景

项目中,需要配置一些规则,然后根据动态的数据去验证规则。比如配置如下的规则:

人数大于5,并且名称包含 “test” 才能验证通过。

继续阅读

JRebel 激活地址及自建 JRebel License Server

说明

JRebel 是一款很强大的热部署工具,但是需要收费。当然收费是不可能的,我们只能想办法破解,破解的方法之一就是找一个 JRebel License Server ,用于激活。

关于激活方式以及 JRebel 插件的安装方式,可以参考我之前的博客 IDEA 下 JRebel 的安装及激活Eclipse 下 JRebel 的安装及激活

由于之前使用的 JRebel License Server 是通过网上搜索到的,突然不能使用了,因此决定自己搭建一个 JRebel License Server 。

自建的 JRebel License Server 地址

http://idea.yujunyi.com:8081/69972f4a-2911-46eb-87ed-7bbb086e4f38

继续阅读

Hibernate 中对象 set 属性时自动保存入库的问题

背景

在某个项目中,通过 Heibernate 查出某个对象后,对属性进行了 set 操作,并没有进行 update 操作,但是在数据中自动保存了。

显然这并不是我想要的,我只是想 set 一下属性,在前端显示,并不想入库,但是 Heibernate 自动保存了。

// 查出对象,原来的 name 为 user1
User user = userManager.findOne(1);
// 将userName 设置为 user2 ,用于前端显示,并没有保存
user.setName("user2");
// heibernate 自动进行了保存,库中的 name 为 user2

继续阅读

【转】分布式锁简单入门以及三种实现方式介绍

转载自 https://blog.csdn.net/xlgen157387/article/details/79036337

一、为什么要使用分布式锁

我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!

注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!

继续阅读

单例模式的破坏与改进

单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

单例的特点

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

单例模式的写法

可以参考这篇文章 单例模式的七种写法

继续阅读

spring mvc 统一异常处理

简介

框架的强大之处就在于把很多需要重复编写的代码剥离出来,形成核心的处理方式。

在异常的处理这块,你不需要再有过多的 try-catch 语句,只需要把异常抛给框架就行了,框架帮你处理!

在 spring mvc 中的统一异常处理有3种,本文拿最简单的一种来演示 。

自定义异常

为了更精确的定位异常,区分异常种类,我们会用到自定义异常。

考虑下如下场景:系统需要提供一个 API,供其它系统查看消息,服务器之间采用 json 交互,这时候我们需要自定一个异常,用来表示逻辑受理失败(比如对方未传必填参数)。

继续阅读

跨域(二)—— CORS 解决跨域问题

在上一篇 文章 中,讲到了利用 JSONP 来解决跨域问题。

由于 JSONP 只支持 GET 请求 ,并且前后端代码都需要改动,因此推荐利用 CORS 来解决跨域问题。

CORS 简介

CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。

更多的介绍可以看阮一峰老师的 博文

继续阅读

跨域(一)—— JSONP 解决跨域问题

跨域

协议、域名、端口都相同才算同域,否则就是跨域。

浏览器为了安全考虑(同源策略),不允许 axaj 跨域获取数据。浏览器会报错 xxx has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

但是可以跨域获取文件内容,例如 script 标签、 img 标签可以跨域使用,利用这一点,就可以用 JSONP 进行跨域请求,解决跨域问题。

JSONP

JSONP ( JSON with Padding ) 是 json 的一种”使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

JSONP 由两部分组成:回调函数+数据 。

JSONP 的原理就是动态添加一个 script 标签,而 script 标签的 src 属性是没有跨域的限制的。

继续阅读

spring mvc 异步调用 @Async

定义

“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。

同步调用

通过一个例子,来看下同步调用。 写了一个 TaskService ,里面有三个方法,分别模拟耗时2秒、3秒、4秒的操作。

继续阅读