Elastic-Job 一:简介 分布式任务调度框架,结合zookeeper技术解决quartz框架在分布式系统中重复的定时任务导致的不可预见的错误 二:示例 pom <dependencies> <dependency> <groupId>org.springframework.boot</groupId&...
AOP实现接口请求参数和响应参数的日志打印 一:示例 @Aspect @Component public class WebLogAspect { private static Logger log = LoggerFactory.getLogger(WebLogAspect.class); private final ObjectMapper mapper; @Autowire...
Transactional注解不回滚 1. 检查你方法是不是public的。 2. 你的异常类型是不是unchecked异常。如果我想check异常也想回滚怎么办,注解上面写明异常类型即可。 @Transactional(rollbackFor=Exception.class) 类似的还有norollbackFor,自定义不回滚的异常。 3. 数据库引擎要支持事务,如果是mysql,注意表要使用支持事务的引擎...
RabbitMQ的消息确认机制 一:确认种类 RabbitMQ的消息确认有两种。 一种是消息发送确认。这种是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递。发送确认分为两步,一是确认是否到达交换器,二是确认是否到达队列。 第二种是消费接收确认。这种是确认消费者是否成功消费了队列中的消息。 二:消息发送确认 (1)ConfirmCallback 通过实现ConfirmCallBa...
windows 环境下安装RabbitMQ 一:安装 (1)安装otp_win32_21.0.1 (2)安装rabbitmq-server-3.7.7 官网有相应的下载链接:http://www.rabbitmq.com/ (3)net stop RabbitMQ && net start RabbitMQ 如果需要,在cmd中执行此命令,重启MQ服务器。 二:启用管理平台 rabbitmq提...
git常用操作 1. 删除远程无效分支 (1)通过git branch -a 查看,远程被删除的分支还在。 (2)git remote prune origin (3)再通过git branch -a 查看,远程被删除的分支不见了 2.删除本地无用分支 git branch -d branchName 3. 更新远程分支 场景:当本地分支和远程分支不同步(比如远程新建了分支...
RabbitMQ实战(一)Spring Boot 整合 RabbitMQ 本文主要介绍RabbitMQ基础组件和SpringBoot整合RabbitMQ简单示例 交换器(Exchange) 交换器就像路由器,我们先是把消息发到交换器,然后交换器再根据绑定键(binding key)和生产者发送消息时的路由键routingKey, 按照交换类型Exchange Type(fanout,direct,topic)把消息投递到对应的队列。(明白这个概念很重要,...
消息队列RabbitMQ基础知识详解 一: 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序或者模块对模块的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。 常见的消息队列有RabbitMQ和kafka。下面详细介绍一下RabbitMQ的适用场景和基本概念。 二: 适用场景 2.1 并发处理 ...
Java职业生涯规划 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。 在大家看之前,我要先声明两点。1、由于我本人是Java后端开发出身,因此所推荐的...
Java之集合框架汇总分析 一:框架图 二:框架分析 (0)点线框表示接口,实线框表示具体的类。 (1)常用的List、Set、Queue、Map都属于集合类。前三个都是继承自Collection,但是Map不是。 (2)List不仅可以生成普通的Iterator(因为继承自Collection),还能生成ListIterator。 (3)常用的类ArrayList、LinkedList、H...
SpringBoot 参数校验 一: 一般校验 (0)适用场景:同一字段没有互相矛盾的验证策略 (1) 请求参数 public class ParamsValidForm { @NotBlank(message = "用户名不能为空") private String userName; @NotBlank(message = "密码不能为空") @Length(...
Spring 源码分析(七)--bean的加载详细分析 一:缓存中获取单例bean 前面已经提到过,单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例缓存中获取,当然这里也只是尝试加载,首先尝试从缓存中加载,然后再次尝试从singletonFactories中加载。因为在创建单例bean的时候会存在依赖注入的情况,而在创建依赖的时候为了避免循环依赖,Spring创建bean的原则是不等bean创建完成...
Spring和Spring Boot源码阅读环境搭建 一:Spring 第一步:安装git和gradle,以及Java8,并配置环境变量。 第二步:打开gitbash,cd到你要放置spring源码工程的目录,输入:git clone https://github.com/spring-projects/spring-framework.git 等待下载完毕。 或者下载指定的release版本解压缩。 第三步:预...
Spring 源码分析(四)--自定义标签的使用 在之前的代码分析中,Spring标签的解析分为 默认标签和自定义标签两种,前一篇文章分析了Spring中对默认标签的解析过程。 本文将分析Spring中自定义标签的使用过程: 一:回顾 public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocumentReader ...
RabbitMQ中各种消息类型如何处理 一:消息类型 Map String(含json字符串类型) 二:处理方法 2.1 Map消息 如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将消息转换成map类型。 2.2 字符串类型(含json格式) 通过String类的构造函数接收byte[]类型的消息数据,获...
Spring 源码分析(三)--默认标签的解析 一:DefaultBeanDefinitionDocumentReader 解析BeanDefinition /* * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * y...
ThreadPoolExecutor线程池 一:类继承结构 继承关系 二:构造函数 构造函数 (1)线程池的大小除了显示的限制外,还可能由于其他资源上的约束而存在一些隐式限制。比如JDBC连接池。 (2)运行时间较长的任务。 如果任务阻塞的...
Spring 源码分析(一)--整体架构和环境搭建 本系统分析的spring源码版本为4.3.8,参考书《Spring 源码深度解析》,深入学习完后开始整理这本书中知识,分析中代码使用4.3.8版本,有一小部分源码和书中低版本的spring源码有所不同。 (一)整体架构 这些模块被分为以下几个部分 (1)Core Container Core容器(核心容器)包含Core,Beans,Context和Expression...
Spring Boot 内嵌servlet容器的Servlets +Filters + listeners 一:servlet (1)启动类 @SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args){ SpringApplication.run(Application.class, args)...
Spring 源码分析(六)--bean的加载整体分析 通过前面的分析,我们结束了对XML配置文件的解析,接下来将进行bean加载的分析。对于加载bean的功能,在Spring中的调用方式为: 或者 MyTestBean tb= bf.getBean("myTestBean", MyTestBean.class); 一:整体分析 (1.1)AbstractBeanFactory 类 public abs...