slf4j

Spring cache logging on @Cacheable hit

廉价感情. 提交于 2020-08-21 08:14:29
问题 Currently I am working with a Spring Cache and the @Cacheable / @CacheEvict annotations. I would like to get some sort of a console log statement like "INFO: i got those values from the cache, NOT from the host. awesome" Is there a clean and easy way to do this? We are using slf4j apparently btw, if that is of any interest. 回答1: Spring itself logs some of its Caching Abstractions behaviors under the org.springframework.cache logger in trace level. So, if you append logs under the org

Spring cache logging on @Cacheable hit

你说的曾经没有我的故事 提交于 2020-08-21 08:14:04
问题 Currently I am working with a Spring Cache and the @Cacheable / @CacheEvict annotations. I would like to get some sort of a console log statement like "INFO: i got those values from the cache, NOT from the host. awesome" Is there a clean and easy way to do this? We are using slf4j apparently btw, if that is of any interest. 回答1: Spring itself logs some of its Caching Abstractions behaviors under the org.springframework.cache logger in trace level. So, if you append logs under the org

集群部署的落地实现之spring shiro redis 架构 第四篇 shiro session ShiroSessionManager 优化 频繁访问redis

点点圈 提交于 2020-08-20 08:25:06
本篇文章主要解决的问题是shiro session使用redis缓存存储后,由于shiro session的设计特点,导致浏览器端请求会非常频繁访问redis,这样就造成资源的浪费,以及系统性能的下降。主要体现在来 自浏览器的一个请求需要访问这个dao的update方法二十多次。这个是shiro框架本身session设计的原因造成的,每次请求过来都需要更新session内部的时间戳。这个需要对浏览器的请求做针对性的优化,也就是把session存放在request请求里面,这样访问的时候先访问request,极大减少直接访问redis次数。 import java.io.Serializable; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.shiro.session.Session; import org.apache.shiro.session.UnknownSessionException; import org.apache.shiro.session.mgt.SessionKey; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;

【Spring】Spring AOP 代理对象生成逻辑源码分析

非 Y 不嫁゛ 提交于 2020-08-20 08:16:23
1. spring aop案例(POJO注入) 1.0 被代理接口 TargetInterface /** * 被代理的接口 * @author Yang ZhiWei */ public interface TargetInterface { void show(); String showName(); } 1.1 被代理对象 @Slf4j public class TargetObject implements TargetInterface { @Override public void show() { log.info("show----->I am a TargetObject!"); } @Override public String showName() { return "showName--->TargetObject !"; } } 1.2 通知 MyAdvice @Slf4j public class MyAdvice { public void takeSeat() { log.info("====> MethodBeforeAdvice:Take Seat!"); } public void turnOffPhone() { log.info("==> MethodBeforeAdvice:turn Off Phone!"); } public

Java 各类日志组件分析汇总

拥有回忆 提交于 2020-08-19 05:46:53
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 作为一名开发人员,相信大家对日志工具不会陌生,Java 也拥有功能和性能都非常强大的日志库;不过这么多日志工具 & 第三方的包,怎样保证每个组件里都能使用约定好的日志工具? 本文将和大家介绍一下 Java 主流的日志工具,以及相对应的使用场景。 基本介绍 在 java 的世界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,现在比较流行的是 slf4j+logback。作为开发人员,我们有时候需要封装一些组件(二方包)提供给其他人员使用,但是那么多的日志工具,根本没法保证每个组件里都能使用约定好的日志工具,况且还有很多第三方的包,鬼知道他会用什么日志工具。假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了,蛋疼吧。。 下面简单介绍下常见的日志工具: JUL JUL 全称 java.util.logging.Logger,JDK 自带的日志系统,从 JDK1.4 就有了。因为 log4j 的存在,这个 logger 一直沉默着,其实在一些测试性的代码中,jdk 自带的 logger 比 log4j 更方便。JUL 是自带具体实现的,与 log4j、logback 等类似,而不是像 JCL、slf4j 那样的日志接口封装。

解决并发问题,数据库常用的两把锁!

旧城冷巷雨未停 提交于 2020-08-18 20:50:23
作者:黄青石 cnblogs.com/huangqingshi/p/10165409.html 在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。 数据锁分为乐观锁和悲观锁 它们使用的场景如下: 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。 悲观锁适用于写多读少的情景,这种情况也相当于JAVA的 synchronized ,reentrantLock等,大量数据过来的时候,只有一条数据可以被写入,其他的数据需要等待。执行完成后下一条数据可以继续。 他们实现的方式上有所不同。 乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功,比如 update table set column = value where version=${version} and otherKey = ${otherKey} 悲观锁实现的机制一般是在执行更新语句的时候采用for update方式,比如 update table set column='value' for update 这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。 下面我就弄一个spring boot

Springboot 系列(六)web 开发之拦截器和三大组件

大城市里の小女人 提交于 2020-08-17 10:47:08
文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。 欢迎关注我的 公众号 ,文章每周更新。 1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分。并没有本质的不同,都是通过实现 HandlerInterceptor 中几个方法实现。几个方法的作用一一如下。 preHandle 进入 Habdler 方法之前执行,一般用于身份认证授权等。 postHandle 进入 Handler 方法之后返回 modelAndView 之前执行,一般用于塞入公共模型数据等。 afterCompletion 最后处理,一般用于日志收集,统一后续处理等。 <!-- more --> 1.1 引入依赖 <!-- Spring Boot web 开发整合 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <artifactid>spring-boot-starter-json</artifactid> <groupid>org