slf4j

Spring Boot整合SLF4j+log4j2

走远了吗. 提交于 2020-04-23 09:16:47
一 点睛 SLF4j作为日志门面,log4j2作为日志实现。 二 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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cakin</groupId> <artifactId>springbootlog4j2</artifactId> <version

Spring Boot整合SLF4j+logback

落爺英雄遲暮 提交于 2020-04-23 09:16:27
一 点睛 SLF4j作为日志门面,logback作为日志实现。 Spring Boot 默认实现的日志管理就是使用的logback。 二 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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cakin</groupId>

Sentinel 1.7.2 发布,完善开源生态及扩展性

孤人 提交于 2020-04-23 07:50:42
Sentinel 1.7.2 正式发布,带来了 Logger SPI 扩展机制、Zuul 2.x 网关流控、SOFARPC 适配等多项特性和改进。下面我们来一起探索一下 Sentinel 1.7.2 的重要特性。 多样化的适配模块 到目前为止,Sentinel 已覆盖微服务、API Gateway 和 Service Mesh 三大板块的核心生态,同时多语言已推出 Java、C++、Go 三种语言的原生实现。 得益于社区的贡献,Sentinel 1.7.2 带来了更多的适配模块: Zuul 2.x 适配模块:可以针对 Zuul 2.x 网关配置定制化的流控策略,流控粒度可以是路由维度以及自定义 API 分组维度。 SOFARPC 适配模块:可以针对 SOFARPC provider/consumer 接口和方法配置规则,支持来源限流,支持配置 fallback 处理逻辑。 日志扩展机制 1.7.2 版本引入了全新的日志扩展机制,新增 Logger SPI 扩展点(目前仅针对 RecordLog 和 CommandCenterLog 生效)。用户可以自定义 Logger 实现来适配项目中的日志模块(如 slf4j、logback、log4j2 等)。Sentinel Core 默认的日志实现仍然基于 JDK logging,同时社区提供了 slf4j 适配模块,用户只需引入

Semaphore 信号量

偶尔善良 提交于 2020-04-23 01:51:35
一、获取单个许可 信号量设置为3,每次获取1个许可,那么就可以连续获得3个许可。 如下面的信号量Demo @Slf4j public class SemaphoreExample1 { private static int threadCount = 20; public static void main(String[] args) throws InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(3); for(int i = 0; i < threadCount; i++){ final int threadNum = i; exec.execute(()->{ try { semaphore.acquire();//获得一个许可 test(threadNum); semaphore.release();//释放一个许可 } catch (InterruptedException e) { e.printStackTrace(); } }); } exec.shutdown(); } private static void test(int threadNum) throws

java实现word转pdf在线预览(前端使用PDF.js;后端使用openoffice、aspose)

吃可爱长大的小学妹 提交于 2020-04-22 05:24:49
背景   之前一直是用户点击下载word文件到本地,然后使用office或者wps打开。需求优化,要实现可以直接在线预览,无需下载到本地然后再打开。   随后开始上网找资料,网上资料一大堆,方案也各有不同,大概有这么几种方案:   1.word转html然后转pdf   2.Openoffice + swftools + Flexmapper + jodconverter   3.kkFileView   分析之后最后决定使用Openoffice+PDF.js方式实现 环境搭建   1.安装Openoffice,下载地址:http://www.openoffice.org/download/index.html   安装完成之后,cmd进入安装目录执行命令:soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard      2.PDF.js,下载地址:http://mozilla.github.io/pdf.js/   下载之后解压,目录结构如下:          代码实现   编码方面,分前端后:   后端:java后端使用openoffice把word文档转换成pdf文件,返回流   前端:把PDF

Springboot2 Tests

非 Y 不嫁゛ 提交于 2020-04-22 01:50:56
import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @RunWith(SpringRunner.class)

第三方工具系列--Lombok常用注解

核能气质少年 提交于 2020-04-21 03:18:57
原创作品,可以转载,但是请标注出处地址: https://www.cnblogs.com/V1haoge/p/9329798.html Lombok注解解析: @NonNull   使用在方法的参数或者构造器的参数上,用于生成null验证。   Lombok可以识别任何第三方工具的字段上标注的@NonNull名称的注解,并在使用@Data、@AllArgsContruct进行生成方法和构造器时进行null判断。   而Lombok的@NonNull注解使用在参数之上,仅仅作用到你自定义的方法和构造器之上。   null判断会采用: 1 if (param == null ) 2 throw new NullPointerException("param is marked @NonNull but is null");   的形式插入,并且会在你方法的开头和构造器的this,super之类的调用之后插入。 @Cleanup   使用在资源之前,用于表示资源可以被完美自动释放(在代码的执行路径超出资源范围之前)。   将该注解标注在表示资源的变量之上,比如:@Cleanup InputStream in = new FileInputStream("some/file");   这样一来,在资源范围结束的位置会自动调用in.close()方法进行资源释放。这个调用会在try..

Java Arrays.asList的三个坑

孤者浪人 提交于 2020-04-20 17:56:39
坑1,用Array.asList转换基础类型数组 代码 @Slf4j public class ArrayAsListDemo { public static void intArrayToList() { int [] arr = {1, 2, 3 }; List list = Arrays.asList(arr); log.info( "list:{} size:{} class:{}", list, list.size(), list.get(0 ).getClass()); } } 结果 list:[[I@78cb5849] size:1 class : class [I size是1... 分析 asList一模版T作为参数 上面的代码其实是等于 所以返回的list只有一个元素,是一个int数组,有三个元素。如下。 log.info(""+ list.get(0).length); // 结果是3 结论 不能直接使用 Arrays.asList 来转换基本类型数组 坑2,Arrays.asList 返回的 List 不支持增删操作 代码 public static void putAndRemove() { String[] arr = {"1", "2", "3" }; List <String> list = Arrays.asList(arr); try {

Java编码辅助工具:Lombok —— 避免重复臃肿的代码,提高效率

这一生的挚爱 提交于 2020-04-20 14:40:18
在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等。这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率。 如何在IntelliJ IDEA中引入Lombok 安装Lombok 插件(否则在调用setter/getter方法时IDE会提示报错): File -> Settings -> Plugins 搜索Lombok Plugin完成安装。 pom.xml中引入lombok依赖( 其中<scope>provided</scope>表示只在编译、测试阶段依赖该jar,运行阶段不依赖(如运行容器中已包含了该jar,则置为provided避免jar冲突),默认<scope>compile</scope>则表示在编译、测试、运行阶段都依赖 ): <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency>    Lombok注解用途 (参考:https://blog.csdn.net/vbirdbest/article/details/79495398)

Java List的SubList使用问题

☆樱花仙子☆ 提交于 2020-04-20 12:29:51
一、Sublist导致OOM 代码 @Slf4j public class SubListDemo { public static void subListOOM() { List <List<Integer>> data = new ArrayList<> (); for ( int i = 0; i < 1000; i++ ) { List <Integer> rawList = IntStream.rangeClosed(1, 100000).boxed().collect(Collectors.toList()); // 构建一个100000个元素的list data.add(rawList.subList(0, 1 )); } log.info( "data.size(): " + data.size()); } } OOM Exception in thread "File Watcher" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.io.File.listFiles(File.java: 1212 ) at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot