![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java Web
文章平均质量分 70
timchen525
学而不思则罔,思而不学则殆!
展开
-
RESTful 风格url守则
指导准则:类似电脑里面的文件夹位置1. RESTful的概念REST 的英文全称“Representational State Transfer”,即“表现层状态转移”。REST的名称“表现层状态转化”中,省略了主语,“表现层”其实指的是“资源”(Resources)的“表现层”。**所谓“资源”,就是网络上的一个实体,或者说是网络上的一个一个具体信息。**它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT.原创 2020-09-26 23:02:01 · 911 阅读 · 0 评论 -
让你的java业务代码并发的调用,并正确的处理返回结果
1 背景实际的java web开发过程中,在业务处理的过程中,需要调用多次外部的服务(可能是http服务,也可能是rpc服务),而这写调用是可以并行的。然而,目前网上能找到如何编写这类代码的资料极少,对于初学者来说想要实现起来会有一定的难度。因此,本篇文章将给出一个简单易用的并行处理代码,希望对你有帮助。2 实现的demo2.1 工具类 ConcurrencyDataTagEnum.java@Getter@AllArgsConstructorpublic enum ConcurrencyData原创 2020-09-20 16:20:25 · 884 阅读 · 0 评论 -
一种Spring web 统一异常处理切面设计
这里给出一种对控制层处理错误时,会抛出异常,导致返回给客户端的数据比较奇怪,因此,给出一个统一异常处理的类,ExceptionHandle,具体结构如下:具体代码如下:具体代码如下:@ControllerAdvice@Slf4jpublic class ExceptionHandle { @ExceptionHandler(value = Exception...原创 2018-07-24 23:32:57 · 628 阅读 · 0 评论 -
谈ThreadLocal中InheritableThreadLocal的用法以及ThreadLocalUtil类
例子1:public class TestThreadLocal { public static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { threadLocal.set(n...原创 2018-07-24 23:31:11 · 2919 阅读 · 0 评论 -
Java中如何存储金额的问题
背景分析:在实际开发过程中,对于金额(一般是元为单位)前端输入一般为小数点两位,比如:1.10,小数点第二位到分。而且数据库的存储粒度可以为分或者元,如果为分,则传入的值需要乘以100。解决方法:前端传入的的为小数点2位(小数点合法的位数是2位,大于2位前端和服务端都要校验),服务端这边用Decimal来接收金额类型数据,数据库存储的类型可以为bigInt(此时传入的Double或者Decimal...原创 2018-07-05 21:11:48 · 4794 阅读 · 0 评论 -
一种多层级机构数据库表设计的思路
在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询。level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。举个栗子:1、创建部门架构表:CREATE TABLE department ( ...原创 2018-07-23 21:39:33 · 31620 阅读 · 15 评论 -
Spring MyBatis generator自动生成配置
1、需要在pom.xml中添加插件配置:<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <configuration> &l...原创 2018-07-10 22:10:56 · 527 阅读 · 0 评论 -
Spring 线程池定时监控
在上一篇Spring异步线程池:https://blog.csdn.net/timchen525/article/details/80672186,该文介绍了如何使用Spring的注解来配置异步线程操作。本篇博文中,补充介绍如何通过Spring定时任务来配置定时检测线程池的使用情况。ThreadPoolExecutor线程池提供了如下几个方法:getTaskCount():线程池已执行和未执行的任...原创 2018-07-09 21:59:53 · 4520 阅读 · 3 评论 -
关于log该如何打以便后期排查问题
以前打印log前,没有考虑之后排查问题的方便与否,而只是觉得重要的信息才打印,但是什么是重要信息呢?这里总结了以下几点经验:1、通过打印log来跟踪一组行为在前面的博文:https://blog.csdn.net/timchen525/article/details/80358723中我写了用logId来跟踪一次request请求所打印的所有log日志,但是对于一个完整的操作步骤,比如,对于一个项...原创 2018-06-09 23:44:55 · 409 阅读 · 0 评论 -
java web中通过fork join来子任务拆分提高处理速度
场景分析: 在项目中,我们可能一次会请求较多数据(比如:一千条),此时,我们可以用fork/join将一次请求分解成N个子任务(每个任务请求1000/N条数据),假如一次请求一千条耗时5s,则我们分解子任务后耗时大概只需要5/N秒多一点。这里各处fork join的demo例子,如下所示举个栗子:@Slf4jpublic class ForkJoinTaskExample extends Rec...原创 2018-07-13 22:33:40 · 1444 阅读 · 1 评论 -
Spring 事务 注解@Transaction 用法
在实际开发中,对于一组数据库操作特别是增删改操作,为了保证原子性,通过需要用事务来控制,要么全部成功,要么全部失败。Spring中可以通过注解@Transaction常用的方法如下: @Transactionalpublic void testTransaction(User user) { int rowNum = userMapper.insertUser(user);...原创 2018-08-09 00:06:12 · 27997 阅读 · 5 评论 -
Spring boot 具体化类和配置来缩短单元测试时间
我们在写完业务代码之后,都需要编写测试用例来验证代码逻辑是否正确,这样不仅方便自己后期检查,也方便后面接手的人快速测试我们的代码。编写测试用例时,我们可以通过如下快捷键:ctrl+shift+T,然后会出现如下提示:点击,Create New Test....通常,只是帮助我们生成一个包下对应的类,以及方法名,然后我们在类上面,简单粗暴的添加:@RunWith(Sprin...原创 2018-08-22 22:52:44 · 2914 阅读 · 1 评论 -
Spring 不通过注解加载bean
工具类:SpringUtil@Componentpublic class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContex...原创 2018-09-06 22:29:25 · 1503 阅读 · 0 评论 -
Spring boot 多数据源配置
这里讲下如何在一个Spring Boot项目中配置多个数据源:Mave中添加依赖:<!-- Spring Boot Mybatis 依赖 --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring...原创 2018-09-26 23:46:46 · 245 阅读 · 0 评论 -
自定义log4j Appender
MySQL中可以自定义Appender,这里给出一个自定义的将日志输出到指定的文件的appender:1、继承AbstractAppender类FileAppender.class@Plugin(name = FileAppender.FILE_APPENDER, category = "Core", elementType = Appender.ELEMENT_TYPE, pr...原创 2018-09-27 22:10:27 · 1382 阅读 · 0 评论 -
guava SimpleTimeLImiter进行方法超时调用控制
1、基于类级别的调用(1)编写接口类UserInfoService.javapublic interface UserInfoService { String getUserName() throws InterruptedException;}(2)编写对应的实现类UserInfoServiceImpl.javapublic class UserInfoServ...原创 2018-09-29 21:38:47 · 5683 阅读 · 1 评论 -
Java 动态代理
Java动态代理的实现有两种方式:1、jdk 自带的动态代理2、spring 中的cglib实现的动态代理区别:jdk自带的动态代理一定要有接口interface类,而cglib不需要。(1)基本信息UserInfoService.java 类:public interface UserInfoService { String getUserNa...原创 2018-10-08 22:42:47 · 281 阅读 · 0 评论 -
idea 使用说明以及常用插件介绍
一、idea使用说明导入idea的配置(如果之前有配置好的idea的配置文件)设置idea的缺省配置文件(1)设置默认的jdk(2)设置默认的Maven仓库地址(3)设置默认的Java文件的头部格式(4)设置文件编码UTF8格式(重要)(5)设置点击Java 文件自动弹出对应的包列表(6)设置idea软件自身可以使用软件的内存大小idea...原创 2018-10-09 00:03:32 · 1197 阅读 · 0 评论 -
利用Swagger2 构建api文档
背景介绍:Swagger是一个用于java代码中写注解,然后可以通过访问指定的网页,自动生成接口文档,并且可以通过接口进行功能测试。使用介绍:(1)添加Maven依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</arti...原创 2018-11-12 21:26:06 · 1160 阅读 · 0 评论 -
MySQL中乐观锁和悲观锁
乐观锁:乐观的认为操作不会导致冲突,在操作数据时,并不进行任何其他特殊处理(也就是不加锁),而是在进行更新时,再去判断是否有冲突。MySQL数据库不支持乐观锁,需要开发者自己实现。乐观者开发者通常实现方案:给表添加一个版本号或者时间戳(基于version、基于timestamp字段),每次操作后,将记录的版本号加1。实际的做法为,先查询出来那条记录,获取version字段,如果要对那条记录进行更新...原创 2018-06-20 22:55:49 · 551 阅读 · 0 评论 -
Guava 常用工具类
引入guava包:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>11.0.2</version></dependency>1、Pr原创 2018-06-20 22:53:40 · 4227 阅读 · 0 评论 -
高效API 接口管理
当前的Java Web开发中,都是前后端分离,后端只需写接口即可,通常是restful风格。在接口开发过程中,面临的挑战有三个:(1)良好的设计文档。后端需要定义好接口的地址、传参以及响应参数等,需要尽可能的让前端开发人员理解设计的接口含义。(2)合适的工具对接口进行模拟请求。需要有一个工具能够实时对接口进行请求(比如:http请求,看接口是否正确)(3)多人协作时,能够共同开发接口。能够共享已有...原创 2018-03-05 21:53:27 · 3532 阅读 · 0 评论 -
Maven 相关
1、Maven中默认的仓库下载依赖是很慢的?解决办法:引入阿里的镜像仓库。 nexus-aliyun * Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public原创 2018-01-15 22:56:54 · 194 阅读 · 0 评论 -
Spring MVC 参数校验
在Java web开发过程中,经常需要从前端获取参数到服务端,服务端预设的变量接收的值可能为正确的值,也可能是空字符串或者是null。对于变量接收的值,我们希望能够在接收值的时候进行控制,而不是在代码中处理的时候报各种奇怪的错误。方法一:在控制层中对于接收参数添加@RequestParam举个栗子:@RestController@RequestMapping("/v1")pub原创 2018-01-30 00:41:51 · 730 阅读 · 0 评论 -
HttpClient 超时相关参数设置
这里主要介绍HttpClient 4.5版本(区别于HttpClient 4.3 版本,参数又说不同)设置连接超时时间CloseableHttpClient。原创 2017-11-10 22:00:44 · 4626 阅读 · 0 评论 -
Maven profiles构建开发、集测、生产环境配置文件
(特别强调:该步骤只在Maven Spring MVC + jdbcTemplate下可行,对于Spring MVCx + MyBatis可能有些许不一样,需要实际做相应的修改)原创 2017-10-15 19:32:07 · 559 阅读 · 0 评论 -
Jackson 解析json的一些用法
Jackson 解析json的一些用法原创 2017-10-19 21:34:24 · 1273 阅读 · 0 评论 -
Restful API设计(Java web Spring MVC 版)
关于Restful API 设计的Java SpringMVC的介绍主要分为两部分,先介绍Restful API的基础知识,然后介绍如何在Java web项目中的Spring MVC中使用。原创 2017-09-22 00:05:00 · 1338 阅读 · 0 评论 -
Postman 根据环境变量进行接口整理
Postman 根据环境变量进行接口整理原创 2017-09-26 08:20:07 · 913 阅读 · 0 评论 -
利用try catch将与业务无关的代码隔离
在实际开发过程中,我们可能会记录请求参数,返回参数值,以及接入第三方组件进行业务的监控等等,这些请求,都可能有异常,此时,需要通过try/catch 将,异常进行捕获并记录,而不要影响已有的业务。举个例子:@Before("log()")public void doBefore(JoinPoint joinPoint) { try { ServletRequestAttr...原创 2018-04-10 21:52:10 · 603 阅读 · 0 评论 -
Maven profiles构建开发、集测、生产环境配置文件(第二版)
在这边文章中,Maven profiles构建开发、集测、生产环境配置文件另一种配置Maven profiles的方式如下:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifa...原创 2018-04-10 21:54:28 · 184 阅读 · 0 评论 -
idea添加.gitignore忽略文件
在idea中的与.git文件同级目录下,添加.gitignore文件,此时,并不能立即生效,需要执行如下语句:注意:后面是有一个点的。git rm -r --cached . git add .git commit -m "update gitignore"...原创 2018-04-22 23:06:54 · 2622 阅读 · 0 评论 -
Java 开发四张技术栈图
1、分布式专题2、高并发/高性能3、性能优化专题4、源码分析专题转载 2018-06-05 00:44:27 · 7304 阅读 · 0 评论 -
Idea 安装JRebel 插件实现热部署
idea中安装JRebel的官方教程:https://zeroturnaround.com/software/jrebel/quickstart/intellij/1、首先安装插件(1)可以在线安装:(2)离线安装:去官方下载地址:https://plugins.jetbrains.com/idea/plugin/4441-jrebel-for-intellij然后选择,Install plugi...原创 2018-05-15 21:45:34 · 3951 阅读 · 0 评论 -
Spring boot 热部署
1、添加Maven依赖包spring-boot-devtools:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</...原创 2018-05-15 21:40:07 · 289 阅读 · 0 评论 -
关于Java web开发中的MySQL的事务语句
在Java web中MySQL的的语句经常可能要执行几次,而这几次我们想包装成一个事务,很多人可能会通过在XML中配置事务,或者直接通过注解@Transaction来实现。举个栗子:@Transactionalpublic void updateProjectStatusByBpmCode(String bpmCode, MjProjectsStatusEnum mjProjectsStatus...原创 2018-05-14 20:52:29 · 525 阅读 · 0 评论 -
log4j2中配置logId唯一标识来标记同一个请求
在项目的开发过程中,对于log打印时,一次request到response的请求,以及到响应到客户端的数据的请求,我们希望都能够串起来,因此,需要有一个唯一id来标识,这里我们通过log4j2中的logId来实现。Log4j2中包含一个类:ThreadContext(实际上是一个本地线程)可以自己生成一个唯一id:比如:uuidlogId = uuid;然后在过滤器或者拦截器之前设置:Thread...原创 2018-05-18 00:08:37 · 12640 阅读 · 2 评论 -
关于代码安全的一些处理措施
1、XSS防御将请求的<script></script>替换为&ltscript&gt&lt/script&gt符号,实现前端展示效果是对的,但是不执行脚本。2、CSRF攻击获取请求头的Referer值(类型的请求都有)设置白名单:比如:*.tim.com,判断Referer的值是否包含.tim.com的后缀,包含则运行,否则跳转错误页面。3...原创 2018-05-18 00:06:33 · 962 阅读 · 0 评论 -
Maven Helper插件查找和排除JAR包的依赖关系
基于Maven依赖创建的Spring项目,经常会引入多方的依赖JAR包,而多方的依赖JAR包中也会依赖其它相关的JAR包,很容易造成JAR包之间冲突。解决的工具 Maven Helper:1、在idea中安装Maven Helper插件:2、安装完重启idea,会发现打开对应的pom.xml文件会多了一个“Dependency Analyzer”:3、点击“Dependency Analyz”:查...原创 2018-05-09 21:56:29 · 11844 阅读 · 0 评论 -
java 中获取本地线程堆栈信息(即 利用java 命令模拟jstack)
java虚拟机中获取线程堆栈的信息,可以通过jstck命令:/** * 通过java代码 使用jstack查看线程堆栈信息 * created by jintian chen * 2018/04/21 */@Slf4jpublic abstract class JstackUtil { /** * 获取线程快照信息 * * @return ...原创 2018-04-22 23:16:40 · 4324 阅读 · 0 评论