slf4j

Java中的读写锁 ReentrantReadWriteLock

匆匆过客 提交于 2020-04-14 16:15:13
【推荐阅读】微服务还能火多久?>>> 使用场景较少 /** * 使用场景较少 */ @Slf4j public class LockExample3 { private final Map<String, Data> map = new TreeMap<>(); private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); private final Lock readLock = lock.readLock(); private final Lock writeLock = lock.writeLock(); public Data get(String key){ readLock.lock(); try{ return map.get(key); }finally { readLock.unlock(); } } public Set<String> getAllKeys(){ readLock.lock(); try{ return map.keySet(); }finally { readLock.unlock(); } } public Data put(String key, Data value){ //没有读写操作,才能获得写锁。 不适合写少,读多的情况,将导致饥饿情况

Java Integer比较

坚强是说给别人听的谎言 提交于 2020-04-14 08:25:31
【今日推荐】:为什么一到面试就懵逼!>>> 代码 1 @Slf4j 2 public class IntegerCompare { 3 public static void doCompare() { 4 5 Integer a = 127; // Integer.valueOf(127) 6 Integer b = 127; // Integer.valueOf(127) 7 log.info("\nInteger a = 127;\n" + 8 "Integer b = 127;\n" + 9 "a == b ? {}", a == b); // true 10 11 Integer c = 128; // Integer.valueOf(128) 12 Integer d = 128; // Integer.valueOf(128) 13 log.info("\nInteger c = 128;\n" + 14 "Integer d = 128;\n" + 15 "c == d ? {}", c == d); // false 16 17 Integer e = 127; // Integer.valueOf(127) 18 Integer f = new Integer(127); // new instance 19 log.info("\nInteger e = 127

springboot过滤器禁止ip频繁访问

空扰寡人 提交于 2020-04-12 14:58:46
1.编写一个过滤器: import lombok.extern.slf4j.Slf4j; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @Slf4j @WebFilter(urlPatterns="/dyflight/*") public class IpFilter implements Filter{ /** * 默认限制时间(单位:ms)3600000,3600(s), */ private static final long LIMITED_TIME_MILLIS = 10 * 1000; /** * 用户连续访问最高阀值,超过该值则认定为恶意操作的IP,进行限制 */ private static final int LIMIT_NUMBER = 5; /**

Springboot单例模式实战封装json转换

时光怂恿深爱的人放手 提交于 2020-04-11 07:33:01
一、定义 保证一个类仅有一个实例,并提供一个全局访问点. 二、优点 (1)在内存里只有一个实例,减少了内存开销 (2)可以避免对资源的多重占用 (3)设置全局访问点,严格控制访问 (对外不会new出来,只能通过这个方法创建对象) 三、缺点 没有接口,扩展困难. 四、举例实现,实际中常用 封装成 转换json的类,传入一个对象,转换为json形式,就可以封装成一个util 最好的实现方式是枚举的实现方式。 一、枚举的实现方式: 1 @Slf4j 2 public enum EnumJacksonUtil { 3 4 /** 5 * 方法集合 6 */ 7 INSTANCE { 8 9 /** 10 * 转成json 11 * @param object 传入的实体类 12 * @return 13 */ 14 @Override 15 public String toJsonString(Object object) { 16 String json = null ; 17 if (! StringUtils.isEmpty(object)) { 18 try { 19 log.info("传入对象:" + object); 20 json = mapper.writeValueAsString(object); 21 log.info("转换结果:" + json); 22 }

面试刷题30:SpringBean的生命周期?

家住魔仙堡 提交于 2020-04-06 13:29:14
spring是Java软件开发的事实标准。 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程),ioc改善了模块之间的耦合问题, 依赖注入的方式:set方法,构造方法,成员变量+ @Autowire ;Bean的管理是IOC的主要功能。 bean的生命周期完全由spring容器管理,从属性设置到各种依赖关系的注入,简化了开发人员对bean的生命周期认知; Spring的容器中Bean生命周期如下: 对象创建 1,从xml配置的Bean,@Bean注解,或者Java代码 BeanDefinitionBuilder 中读取Bean的定义,实例化Bean对象; 2,设置Bean的属性; 3,注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware); 4, 执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization() 5, 执行 InitalizingBean.afterPropertiesSet() 方法 6,执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法; 7,执行方法

springboot使用PropertyResource注解读取指定配置文件的属性(传智播客代码)

只谈情不闲聊 提交于 2020-04-06 09:25:44
接上篇: SpringBoot/Spring使用@Value进行属性绑定(传智播客代码) ConfigurationProperties注解默认会从全局配置文件读取属性 ,当属性多的时候,主配置文件( application.yml、application.properties)会臃肿,因此有必要把某一类别属性单独分开配置 @PropertyResource读取指定配置文件 该注解的value支持string数组,可以填写多个配置文件路径,例如 @PropertyResource(value={"aaa.properties","classpath:bbb.properties"}) Person.java package com.atguigu.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype

springboot使用ImportResource注解加载spring配置文件(传智播客代码)

放肆的年华 提交于 2020-04-06 09:25:11
接上篇: springboot使用PropertyResource注解读取指定配置文件的属性(传智播客代码) @ImportResource可以加载多个配置文件 DemoApplication.java package com.atguigu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @ImportResource(locations = "classpath:beans.xml" ) @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication. class , args); } } beans.xml <? xml version="1.0" encoding="UTF-8" ?> < beans xmlns ="http://www

面试刷题30:SpringBean的生命周期?

流过昼夜 提交于 2020-04-05 23:10:04
spring是Java软件开发的事实标准。 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程),ioc改善了模块之间的耦合问题, 依赖注入的方式:set方法,构造方法,成员变量+ @Autowire ;Bean的管理是IOC的主要功能。 bean的生命周期完全由spring容器管理,从属性设置到各种依赖关系的注入,简化了开发人员对bean的生命周期认知; Spring的容器中Bean生命周期如下: 对象创建 1,从xml配置的Bean,@Bean注解,或者Java代码 BeanDefinitionBuilder 中读取Bean的定义,实例化Bean对象; 2,设置Bean的属性; 3,注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware); 4, 执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization() 5, 执行 InitalizingBean.afterPropertiesSet() 方法 6,执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法; 7,执行方法

java日志:slf4j

久未见 提交于 2020-03-28 09:26:26
一、设计模式之门面模式(facade) 1. 概念:外部与子系统的通信,必须通过统一的外观对象(facade)进行,使得子系统更易于使用 2. 模式图 3. 核心点: a. 知道所有子角色的功能和责任 b. 将客户端发来的请求,委派到子系统中,门面对象没有实际的业务逻辑 c. 不参与子系统内业务逻辑的实现 二、slf4j概述 1. slf4j是门面模式的典型应用,因为一个系统中可能有其他jar包,使用了logback, log4j, slf4j等不同的日志系统,需要引入一个适配层去决定使用哪种日志系统 2. slf4j只是一个日志标准,并不是日志系统的具体实现:提供日志接口、提供获取具体日志对象的方法 3. slf4j的具体实现:slf4j-simple, logback, slf4j-log4j12 三、应用:使用slf4j+logback 1. 添加依赖 <dependency> // slf4j <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> // logback实现slf4j <groupId>ch.qos.logback</groupId> <artifactId>logback

Spring Boot 与 Logback 日志配置

[亡魂溺海] 提交于 2020-03-27 02:13:25
3 月,跳不动了?>>> 本文记录 SpringBoot 与 Logback 是如何工作的,即观察 SpringBoot 中 Logback 是怎么一步一步初始化的。用以测试的 SpringBoot 版本是 1.5.16, 而非最新的 SpringBoot 2。关于 SpringBoot 日志的官方文档在 Logging , 但不太详细或透彻。本文也不承诺说就理解得更有深度,只是为官方文档提供更多方面的参考。 SpringBoot 默认使用 Slf4J + Logback 来记录日志,对于一个基本的依赖于 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> 的 Spring Boot 项目,上面组件依赖了 spring-boot-starter-logging 组件,而该组件又引入了以下几个依赖 logback-classic: 依赖了 Slf4J jcl-over-slf4j jul-to-slf4j log4j-over-slf4j 相当于把其他的日志框架全桥接到了 Slf4J + Logback 上去了。 阅读全文 >> 来源: oschina 链接: https://my.oschina.net