springboot
springboot
干了这杯柠檬多
运气是实力的一部分,但我运气向来不好,所以只能靠实力去弥补!
展开
-
批量查询接口如何巧妙利用单查询接口中的@Cacheable
如标题所述,本文是为了探讨在已有jvm缓存的单查询接口的基础上增加批量查询接口功能,要如何实现,如何优化,如何抉择。spring-cache用法请自行查询。demo:单查询接口如下:@Servicepublic class BizCacheServiceImpl implements BizCacheService { /** * 单查询接口 * * @param id * @return */ @Cacheable(k原创 2022-04-29 19:11:08 · 1592 阅读 · 0 评论 -
aop和自定义注解实际使用场景
aop配合自定义注解实现了什么?1.将验证逻辑放在aop中,减少对业务代码的侵入。2.自定义注解可以实现自定义化是否使用aop。3.当然也可以将结果放在threadLocal里面存储。1.定义一个自定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface userCheck { int value() default 0;}2.定义一个接口@User原创 2022-01-10 18:15:16 · 598 阅读 · 0 评论 -
springboot源码分析(二)事件驱动机制与配置文件加载
第一篇分析了springboot的启动流程和tomcat内嵌过程。文章地址:https://blog.csdn.net/qq_39404258/article/details/111191959。该篇将重点分析一下事件驱动机制与配置文件加载。事件驱动机制事件驱动机制是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。事件驱动的一个常见形式便是发布-订阅模式。事件机制主要由三个部分组成:事件源(so原创 2020-12-16 17:25:11 · 988 阅读 · 0 评论 -
springboot源码分析 (一)启动流程及内嵌tomcat源码
本来想一篇分析完springboot核心源码的,发现内容有点多,就拆分为多个章节。按照个人理解,springboot核心有这么几个(相对于spring来说):1.tomcat是如何内嵌的2.自动装配原理 自动装配稍微分析了一下,可能不是很详细自定义starter及自动配置源码分析3.事件驱动机制 4.配置文件怎么被加载的5.热部署原理这一章作为起点,先分析一下springboot启动流程和tomcat是如何被内嵌的,不对其他问题做过多分析。springboot启动流程...原创 2020-12-15 10:49:24 · 502 阅读 · 0 评论 -
spring源码解析 (七) 事务底层源码实现
1.spring事务的本质数据库中的事务默认存在,只不过每次都自动提交了,数据库中这个参数--autoCommitd=true其本质是 begin sql commit而spring事务其本质是数据库一致,也是begin sql commit ,只不过将autoCommitd设置为了false。而每个事务其实都是一个数据库连接,根据不同的事务传播机制进行挂起,保存点等操作。spring事务执行还是通过代理织入的一个小demo:如果对象直接调用自己的方法,那么这个@Transactio原创 2020-12-03 14:47:51 · 465 阅读 · 0 评论 -
spring源码解析 (六)aop代理选择、使用和执行逻辑源码分析
spring设置代理的方法首先spring设置代理的方法有两种:手动代理和自动代理。而自动代理的方式又有两种:通过实现PointcutAdvisor接口和@Aspect注解。那么接下来就详细说一下这个过程。手动代理直接操作代理底层类ProxyFactoryProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(new UserService()); //1.设置目标对象proxyFactory.add原创 2020-12-01 11:32:07 · 1426 阅读 · 0 评论 -
spring源码解析(五) 循环依赖
1.什么是循环依赖?Bean A → Bean B → Bean A2.循环依赖造成的结果当SpringBoot正在加载所有Bean时,SpringBoot尝试以能正常创建Bean的顺序去创建Bean。这样会抛出异常。┌─────┐| testA defined in class path resource [com/chuan/config/TestConfig.class]↑ ↓| testB defined in class path resource [com/c原创 2020-11-23 16:01:39 · 452 阅读 · 0 评论 -
spring源码解析(四) 推断构造方法
该篇以createBeanInstance方法为起点分析推断构造方法怎么一步步到createBeanInstance方法refresh()-》finishBeanFactoryInitialization-》preInstantiateSingletons-》getBean-》 doGetBean-》createBean-》doCreateBean-》createBeanInstance推断构造方法源码推断构造方法是在创建实例化时进行推断的,也就是这个createBeanInstance方法原创 2020-11-18 11:46:26 · 752 阅读 · 1 评论 -
spring源码解析(三) applicationContext启动过程
applicationContext启动过程 首先去准备容器,也就是 new一个applicationcontext,Config.class为@ComponentScan注解标记的类。AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(Config.class);调用它自己的构造方法。public AnnotationConfigApplication.原创 2020-11-16 16:38:17 · 700 阅读 · 1 评论 -
spring 源码解析(一) bean的生命周期
首先来一张bean的生命周期图该篇文章将以加载类为起点开始分析bean的生命周期。首先不能完全保证理解正确,只是博主自己的思路,有问题及时指出,共同进步。bean生命周期源码分析加载类源码将从AbstractAutowireCapableBeanFactory中的createBean方法开始分析,也就是合并完beanDefinition,开始加载类。@Override protected Object createBean(String beanName, RootBeanDef原创 2020-11-04 16:03:45 · 316 阅读 · 1 评论 -
spring源码解析(二) @Autowired自动注入过程
1.依赖注入到底有几种?两种、四种、五种?两种:手动:set(byType、byName)、构造器自动:xml中:set、构造器 autowired注解中:set、属性、构造器重点不在于到底有几种,而在于是否真的理解了依赖注入。2.@Autowired注解方式自动注入源码过程具体分析属性填充populateBean方法:只看关键部分,注入的部分 // 是否在BeanDefinition中设置了属性值 PropertyValues pvs = (mbd.hasProper原创 2020-11-03 16:52:53 · 1614 阅读 · 0 评论 -
springboot中怎么获取多例(prototype)
平时我们使用springboot注入的类,默认是单例的。所以需要在注入的时候声明是原型模式(prototype)@Component@Scope("prototype")public class User1 { private String name; public String getName() { return name; } public void setName(String name) { this.name =原创 2020-10-14 16:19:58 · 3379 阅读 · 0 评论 -
springboot使用@Value给静态方法传参数
springboot不支持直接给静态变量使用@Value读取配置文件,但可以通过set方法进行参数的获取配置文件:my: imgPath: D:/abcd@Component注解必须添加,通过传参给set方法,再通过set方法赋值。@Componentpublic class FileUtil { //存储位置 public static String basePa...原创 2019-12-09 15:41:14 · 1537 阅读 · 0 评论 -
springboot自定义starter及自动配置源码分析
springboot-starter介绍SpringBoot 最强大的功能之一就是把我们常用的场景抽取成了一个个starter(场景启动器),可插拔的特性。spring-starter的官方命名规范:前缀:spring-boot-starter- 模式:spring-boot-starter-模块名自定义命名空间后缀:-spring-boot-starter 模式:模块-spring-boot-starter自定义starter demo项目结构:首先创建一个空的mave原创 2020-09-01 18:50:59 · 322 阅读 · 0 评论 -
一句话说明springboot常用注解!
1.配置@SpringBootApplication springboot启动,本质上是@ComponentScan、@Configuration和@EnableAutoConfiguration三个注解的组合@SpringBootConfiguration springboot启动配置@Configuration 配置注解@EnableAutoConfiguration 自动配置@Component 组件,配置在类上@ComponentScan 组件扫描@Controller原创 2020-08-10 18:03:59 · 359 阅读 · 0 评论 -
多模块项目访问不到jsp页面
自己为了模拟并发,需要一个jsp页面来发起请求,然后在springboot多模块项目中做实验,发现jsp页面怎么都访问不了。通过日志查看发现他找不到webapp下的jsp页面,但我的jsp页面明明在那。我开始去翻自己写过的前后端未分离的项目,发现配置都一样怎么就访问不了呢,后面想了想会不会是多模块引起的,通过网上查阅发现,确实是多模块引起的,但百度一搜,十几个链接全是抄的一篇,这我能说什么呢,最终自己还是找到了问题并解决。使用工具 idea我启动项目时没有配置工作目录,这个是作为相对路径来寻址。原创 2020-07-15 16:50:19 · 483 阅读 · 1 评论 -
Springboot中配置activeMQ持久化
一、activeMQ数据库持久化配置ActiveMQ持久化的三种方式,我们采用数据库的方式来进行持久化。(1) Memory 消息存储-基于内存的消息存储。(2) 基于日志消息存储方式,KahaDB是ActiveMQ的默认日志存储方式,它提供了容量的提升和恢复能力。(3) 基于JDBC的消息存储方式-数据存储于数据库(例如:MySQL)中。首先我们先来配置activeMQ在conf文件夹里的activeMQ.xml中增加一个jdbc的bean<bean id="active原创 2020-06-29 17:58:34 · 1935 阅读 · 0 评论 -
随笔 springboot @Async注解
在springboot中使用异步线程,需使用@Async注解。在启动类上需增加@EnableAsync(proxyTargetClass = true),proxyTargetClass为选择何种代理,@SpringBootApplication@EnableAsync(proxyTargetClass = true)public class ChuanApplication { public static void main(String[] args) { Spr原创 2020-06-03 18:34:35 · 1674 阅读 · 0 评论 -
springboot使用注解实现redis缓存
在springboot中两种方式使用缓存,一种是直接通过 RedisTemplate 来使用,另一种是使用 Spring Cache 集成 Redis(也就是注解的方式)。RedisTemplate 方式不作说明,详细说明实现一下注解方式。核心三个注解: @Cachable @CachePut @CacheEvict 1.@Cachable根据方法的请求参数对其结果进行缓存: Key:缓存的 Key,可以为空,如果指定要按照 SPEL 表达式编写,如果不指定,原创 2020-06-02 18:41:09 · 1159 阅读 · 0 评论 -
随笔 全局异常处理spring @ExceptionHandler
为了避免每次都try..catry,采用全局异常处理请求: @PostMapping("/login") public String login(String password,String username) throws Exception{ int i=1/0; }全局异常处理类:@RestControllerAdvicepublic class MyException { @ExceptionHandler(Excepti原创 2020-05-27 15:48:27 · 266 阅读 · 0 评论 -
springboot集成redis哨兵模式
本文侧重于springboot集成,redis哨兵模式的搭建请参考其他文章。前置条件一主二从redis和三个哨兵,springboot环境。连接测试先写一个小demo来测试一个哨兵模式是否能够访问。public class test1 { public static void main(String[] args) throws Exception { test1.testSentinel(); } public static void tes原创 2020-05-26 17:49:16 · 1295 阅读 · 2 评论 -
springboot @Valid和BindingResult校验参数
@Valid和BindingResult是要一起使用的,成对存在进行参数校验,一个binding对应一个@Valid。常用校验注解@Null //被注释的元素必须为null@NotNull //被注释的元素不能为null@AssertTrue //被注释的元素必须为true@AssertFalse //被注释的元素必须为false@Min(value) //被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) //被注释的元素必须是一个数字,其值必原创 2020-05-14 17:18:21 · 1197 阅读 · 0 评论 -
springmvc常用注解
1.@RequestMapping@RequestMapping可以指定GET、POST请求方式 @GetMapping等价于@RequestMapping的GET请求方式 @RequestMapping(value = "/list",method = RequestMethod.GET) public String getlist(){ // List good...原创 2020-04-27 14:47:57 · 243 阅读 · 0 评论 -
springboot集成mybatis-plus 环境搭建(一)
项目结构:集成mybatis-plus的坑挺多的,算是踩了一遍。pom文件:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...原创 2020-04-12 16:53:02 · 1417 阅读 · 0 评论 -
spring data rest 入门(三)自定义查询
通过简单的增删改查知道了spring data rest 的基本语法,那么带入一些真实环境来实现一些用例。一、密码一栏的信息不想让用户看到。在user实体类中增加 @JsonIgnore private String password;http://localhost:8081/api/user/2返回结果:{ "name": "李四", ...原创 2020-02-04 11:29:05 · 762 阅读 · 0 评论 -
spring data rest 入门(二)CRUD基本使用
第一步将环境搭好以后开始CRUD操作。使用工具postman,eclipse,navicat。在配置文件上增加了一个/api的basepath。数据库:一、post新增使用postman工具进行相关操作:遇到的错误:No suitable HttpMessageConverter found to read request body into object of t...原创 2020-02-03 15:49:00 · 353 阅读 · 0 评论 -
spring data rest 入门(一)环境搭建
一、数据库localhost下创建一个数据库,里面有一张表为user表,id为自增。二、环境搭建<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap...原创 2020-02-02 13:41:28 · 330 阅读 · 0 评论