在做业务开发时,遇到了一个事务不起作用的问题。大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。 ...内部方式使用this调用方式时,使用的是实例调用,并没有通过代理类调用方法,所以会导致事务失效。 ...方法一 引入自身bean 在类内部通过@Autowired将本身bean引入,然后通过调用自身bean,从而实现使用AOP代理操作。 ...通过ApplicationContext引入bean 通过ApplicationContext获取bean,通过bean调用内部方法,就使用了bean的代理类。 ...(User user) { ((UserService) AopContext.currentProxy()).invokeInsertUser(user); } 以上就是内部方法调用时,事务不起作用的原因及解决办法
;且本示例持久层为jpa,所以我们顺便控制台输出一下sql,方便后面观察。...,会根据这个key先去缓存找是否有数据,如果有,就直接返回了,如果没有,那就会去数据库查询后返回,并以此key为key,存入缓存中;当再次调用此方法时,若该缓存没有过期,那么当此方法的参数和这个key相同时...id=1599991,第一次访问时发现会有sql显示,第二次就没有sql了,因为缓存中已经有了这个id为key的数据了,直接走的缓存; 如果deleteById方法上没有@CacheEvict注解时,那我们执行...userName=momo456,会发现,尽管我们是第一次查询,但是控制台并没有显示sql语句,说明此请求并没有向数据库发送请求,而是直接走的缓存。...- beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。
引言 以前写了几篇关于SpringBoot的文章《面试高频题:springBoot自动装配的原理你能说出来吗》、《保姆级教程,手把手教你实现一个SpringBoot的starter》,这几天突然有个读者问...所以我们的入口就是SpringServletContainerInitializer的onStartup方法,这也应该是web容器启动调用Spring相关的第一个方法。...这是由于我们在web.xml 里面配置了DispatcherServlet,然后web容器就会去调用DispatcherServlet的init方法,并且这个方法只会被执行一次。...你有遇到事物不起作用的时候,其实这也是一种情况) 同时通过两个容器同时来管理所有的类?...这就导致了你的事物不起作用了。在补充一个问题:SpringBoot 里面是否还有父子容器?我们下篇再见!
; } }); return result; } 二、SpringBoot 中异步调用的使用 1、介绍 异步请求的处理。...可通过控制台日志输出可以看出,每次输出线程名都是递增的。所以最好我们来自定义一个线程池。...调用的异步方法,不能为同一个类的方法(包括同一个类的内部类),简单来说,因为 Spring 在启动扫描时会为其创建一个代理类,而同类调用时,还是调用本身的代理类的,所以和平常调用是一样的。...调用的是静态 (static) 方法 c....{ Map resMap = new HashMap(); try{ //这样调用同类下的异步方法是不起作用的
实例说明: 在平时的 Web 开发中,method 常用的值是 GET 和 POST,但是实际上,HTTP 方法还有 PATCH、DELETE、PUT 等其他值,这些方法又通常会匹配为如下的 CRUD...动作: CRUD 动作 HTTP 方法 Create POST Read GET Update PUT 或 PATCH Delete DELETE 尽管通常来讲,HTTP 方法会映射为 CRUD 动作...,我们得知通过 RESTful 风格能成功调用到正确的方法并且能获取到或者返回正确的参数,没有任何错误,则说明成功!...如果你想要看到更多的细节信息,可以在每次调用 perform() 方法后再跟上一句 .andDo(MockMvcResultHandlers.print()) ,例如: // 1、get...按钮,即可完成一次请求调用,这太酷了。
SpringBoot异步请求和异步调用 异步请求与同步请求 同步请求 %% 时序图例子,-> 直线,-->虚线,->>实线箭头 sequenceDiagram participant 浏览器/APP...可通过控制台日志输出可以看出,每次输出线程名都是递增的。所以最好我们来自定义一个线程池。...调用的异步方法,不能为同一个类的方法(包括同一个类的内部类),简单来说,因为Spring在启动扫描时会为其创建一个代理类,而同类调用时,还是调用本身的代理类的,所以和平常调用是一样的。...调用的是静态(static )方法 调用(private)私有化方法 解决4中问题1的方式 将要异步执行的方法单独抽取成一个类,原理就是当你把执行异步的方法单独抽取成一个类的时候,这个类肯定是被...{ Map resMap = new HashMap(); try{ //这样调用同类下的异步方法是不起作用的
; } }); return result; } 二、SpringBoot中异步调用的使用 1、介绍 异步请求的处理。...可通过控制台日志输出可以看出,每次输出线程名都是递增的。所以最好我们来自定义一个线程池。...调用的异步方法,不能为同一个类的方法(包括同一个类的内部类),简单来说,因为Spring在启动扫描时会为其创建一个代理类,而同类调用时,还是调用本身的代理类的,所以和平常调用是一样的。...b.调用的是静态(static )方法 c.调用(private)私有化方法 5、解决4中问题1的方式(其它2,3两个问题自己注意下就可以了) 将要异步执行的方法单独抽取成一个类,原理就是当你把执行异步的方法单独抽取成一个类的时候...{ Map resMap = new HashMap(); try{ //这样调用同类下的异步方法是不起作用的
; 在AdvancedEtcdService.java中新增watch方法的定义,入参是指定的key,以及调用方定制的监听实现,返回值Watcher是jetcd对监听事件的封装,调用方可以用Watcher...etcdctl put abc 222 OK [root@centos7 ~]# docker exec 27_etcd1_1 /usr/local/bin/etcdctl del abc 1 此时在springboot...的控制台页面,可见监听的方法被执行了,修改和删除的具体内容都被打印出来: 租约 接下来学习租约特性,这是个很实用的功能,如果应用A负责维护某个key的续租,当应用A出现问题无法续租时则该key就会过期...,可见keepAlive的入参需要指定一个回调用来完成续租成功后的操作,该回调中的方法有点多: @Override public void putWithLease(String key, String...} /** * 每次续租操作完成后,该方法都会被调用
,可以在控制台输出当前访问的IP地址 温馨提示 由于当前制作的功能需要在对应的调用位置进行坐标导入,因此必须保障仓库中具有当前开发的功能,所以每次原始代码修改后,需要重新编译并安装到仓库中。...,可以在控制台看到统计数据,到此基础功能已经开发完毕。...使用拦截器后使用时不需要再引入对象调用方法了,导入 starter 即可实现功能。...、delete等(如果直接get或post,无需隐藏域) <input value="REST-<em>GET</em>提交" type="submit...以后的<em>方法</em><em>调用</em>getMethod是<em>调用</em> requesWrapper b.请求映射原理
每个微服务 API 被调用的频率不一样,可以利用 Serverless 精准管理成本和弹性。 2. 不用担心一个 API 调用量大而需要扩容整个服务,Serverless 可以自动扩缩容。 3....登录云函数 SCF 控制台; 云函数控制台地址:https://console.cloud.tencent.com/scf 2....切换到「函数代码」页签,按照如下流程操作,通过测试模板发起模拟请求体验待办应用增删改查功能: 查询待办列表: 请求方式选择 GET,path 填写 /todos,点击「测试」后,在响应 Body 中可以查看到当前的待办事项...修改待办事项: 请求方式选择 PUT,以将 key 为 3 的待办事项由未完成改为完成为例,path 填写 /todos/3,body 填写 {"key":"3","content":"Third todo...提交方法:本地上传 zip 包 单击上传选择打包好的 zip 文件 其他保持默认配置,单击「完成」即可完成函数创建。
,txn方法表示事务开始,Cmp对象封装了做比较的逻辑,接下来的If、Then等方法规定了比较成功后的逻辑(您还可以选择使用Else方法),最后用commit方法将操作一次性提交: package com.bolingcavalry.dao.impl...; 在AdvancedEtcdService.java中新增watch方法的定义,入参是指定的key,以及调用方定制的监听实现,返回值Watcher是jetcd对监听事件的封装,调用方可以用Watcher.../etcdctl del abc 1 此时在springboot的控制台页面,可见监听的方法被执行了,修改和删除的具体内容都被打印出来: [在这里插入图片描述] 租约 接下来学习租约特性,这是个很实用的功能...,可见keepAlive的入参需要指定一个回调用来完成续租成功后的操作,该回调中的方法有点多: @Override public void putWithLease(String key, String...} /** * 每次续租操作完成后,该方法都会被调用
method用来指定请求方式,值为GET、POST、PUT、DELETE等等,同样,该注解也是针对不同的请求方式衍生出了几个具体的子注解,参考下表。...RESTfulAPI 便是目前前后端分离的最佳实践,在传统风格的接口中,请求方法只是使用了 get 或者 post 类型,但在 HTTP 请求方法中,method 存在较多的取值类型例如 put、delete...RESTfulAPI 设计如下: URL 请求方法(相关注解) 功能说明 /users GET(@GetMapping) 查询用户列表 /users POST(@PostMapping) 添加一个用户.../users/id GET(@GetMapping) 根据 id 查询用户信息 /users/id PUT(@PutMapping) 根据 id 修改用户信息 /users/id DELETE(@DeleteMapping.../index:是否能跳转到home.html并显示内容[this is home] /test:页面是否出现[success]且控制台是否显示打印信息。
会将当前类中声明的一个或者多个@Bean注解标记的方法的实例注入到Spring容器中。实例名就是对象名。 @EnableAutoConfiguration是SpringBoot的自动配置注解。...使用此注解无法返回jsp,html页面,InternalResourceViewResolver不起作用。返回的内容就是return的内容。...@RequestMapping注解有6个属性 value,method value 请求的方法 method 请求的类型,GET,POST,PUT,DELETE consumes,produces consumes...ModelAttribute,@RequestAttribute @PathVariable @RequestMapping(value = "/index7/{id}",method = RequestMethod.GET...@GetMapping GetMapping注解已经默认封装了@RequestMapping(method = RequestMethod.GET) @PostMapping PostMapping注解已经默认封装了
上篇[ SpringBoot 动态设置 logback 日志的级别 ] 说了 logback 动态设置日志级别。这篇来说下 log4j2 日志框架结合 SpringBoot 动态设置日志级别。...-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> <!...在控制台只看见打印了 ROOT logger 对象。...再次调用 http://127.0.0.1:8080/logger/print 接口打印日志,在控制台看到不在打印 debug 级别日志 21:19:25.756 [http-nio-8080-exec... 重启服务,再次调用
= null && logFile == null) { // 调用reinitialize方法重新初始化 // 默认的reinitialize方法不做任何处理,logback,log4j和log4j2...这依赖会导致LoggingSystem的静态方法get获取LoggingSystem时得到LogbackLoggingSystem。 因此springboot程序使用logback作默认日志。...所以项目没有任何日志配置时,默认就是在控制台打印了项目启动信息。...loadDefaults方法(loadDefaults方法内部会把LogFile构造成FileAppender),而是调用了loadConfiguration方法,该方法会根据logback.xml文件中的配置去构造...3 NoOpLoggingSystem SpringBoot内部的NoOpLoggingSystem,这个日志系统内部什么都不做,构造过程: public static LoggingSystem get
生成短信随机验证码工具类 import java.util.Random; public class CodeUtil { //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写...("phoneNumber").toString(); // 调用工具栏中生成验证码方法(指定长度的随机数) String code = CodeUtil.generateVerifyCode...reids工具类中存储方法设置超时时间 } return map; } /** * 注册验证 * @ResponseBody 返回...DOCTYPE html> springboot整合redis之用户手机验证码注册登录...-- springboot整合redis之用户手机验证码注册登录--> <
TOC 启动类上的注解 @SpringBootApplication这个注解会在SpringBoot启动类上。...会将当前类中声明的一个或者多个@Bean注解标记的方法的实例注入到Spring容器中。实例名就是对象名。 @EnableAutoConfiguration是SpringBoot的自动配置注解。...使用此注解无法返回jsp,html页面,InternalResourceViewResolver不起作用。返回的内容就是return的内容。...@RequestMapping注解有6个属性 value,method value 请求的方法 method 请求的类型,GET,POST,PUT,DELETE consumes,produces consumes...Gitee:https://gitee.com/rumenz/springboot/tree/master/lession5 https://rumenz.com/rumenbiji/springboot-annotation.html
(springboot2.x之后使用该接口,springboot1.x使用WebMvcConfigurerAdapter类,不过该类已经被标识过期了)可以配置很多东西,如下: 下面,我们就通过代码,使用...WebMvcConfigurer接口来实现一个springboot的拦截器。...registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET...> map = new HashMap(); map.put("name", "happyjava"); return "OK"; } 实现postHandle方法,如下: 运行程序,请求接口:...在断点处停了下来,但是并没有看到控制台输出了“执行了postHandle”。
本次实例教程需要创建2个springboot项目,一个 rabbitmq-provider (生产者),一个rabbitmq-consumer(消费者)。...接下来调用接口/sendTopicMessage2: 然后看消费者rabbitmq-consumer的控制台输出情况: TopicManReceiver监听队列1,绑定键为:topic.man TopicTotalReceiver...创建三个队列 :fanout.A fanout.B fanout.C * 将三个队列都绑定在交换机 fanoutExchange 上 * 因为是扇型交换机, 路由键无需配置,配置也不起作用...④消息推送成功 那么测试下,按照正常调用之前消息推送的接口就行,就调用下 /sendFanoutMessage接口,可以看到控制台输出: ConfirmCallback: 相关数据:null...好,这篇Springboot整合rabbitMq教程就暂且到此。
领取专属 10元无门槛券
手把手带您无忧上云