slf4j

别在 Java 代码里乱打日志了,这才是正确的日志打印姿势!

南楼画角 提交于 2020-08-15 07:35:49
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 使用slf4j 1.使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 2.实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol); 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug("Processing trade with id: " +id + " symbol: " + symbol); } 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例(不要这么做): logger.debug("Processing trade

SpringBoot + Mybatis + Redis 整合入门项目

梦想的初衷 提交于 2020-08-14 20:26:23
这篇文章我决定一改以往的风格,以幽默风趣的故事博文来介绍如何整合 SpringBoot、Mybatis、Redis。 很久很久以前,森林里有一只可爱的小青蛙,他迈着沉重的步伐走向了找工作的道路,结果发现许多的招聘要求都要会 Redis。 小青蛙就想啥是 Redis 呢,为什么要用 Redis 呢? 难道是因为 Mysql 的币格不够高吗,小青蛙点开了收藏已久的网站: 十万个为什么 发现原来随着使用网站的用户越来越多,表中的数据也越来越多,查询速度越来越慢。 MySql 的性能遇到了瓶颈,所以许多网站都用 Redis 作缓存。 然而能作缓存的不仅只有 Redis,还有 Memcache,那为什么要用 Redis 呢? 1、性能方面:它们都是将数据存放在内存中,所以性能基本相似。 2、数据类型方面:Redis 支持五种数据数据类型:字符串、散列、列表、集合、有序集合,而 Memcache 仅仅支持简单的 key-value。 3、数据持久化方面:Redis 可以通过 RDB快照、AOF日志 等方式进行数据持久化,但是 Memcache 不可以。 4、数据备份方面:Redis 支持 master-slave 主从模式的数据备份。 在了解到许多 Redis 的好处后,小青蛙已经迫不及待的想了解它了。 为了更好的使用 Redis,了解 Redis 的五种数据类型适应场景是很有必要的。 1

基于Validator排序字段防SQL注入

让人想犯罪 __ 提交于 2020-08-14 20:18:08
一、定义排序基类 public interface BaseSortModel { String getSort(); @ApiModelProperty(hidden = true) default String getSortField() { if (StringUtils.isNotBlank(getSort()) && getSort().contains("-")) { return getSort().split("-")[0]; } return null; } @ApiModelProperty(hidden = true) default String getSortType() { if (StringUtils.isNotBlank(getSort()) && getSort().contains("-")) { return getSort().split("-")[1]; } return null; } } 二、定义校验注解 @Target({ FIELD, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = {Sort.SortValidator.class}) public @interface Sort { String message() default

Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar 解决方法

99封情书 提交于 2020-08-14 14:12:48
Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar 解决方法 问题: 导入spark依赖包后,local模式下运行spark本地程序报错: Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. 这个错运行spark程序比较常见,由于很多maven项目中都依赖了log4j的包,这里需要针对冲突的包执行exclude即可 第一层(exclusion 报错jar 包的log4j即可): 网上最常见的解决方法,也是报错日志官方给出的解决方案 假设我加入了spark core的依赖包: <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.2.1</version> <

springboot quartz 手写任务调度

独自空忆成欢 提交于 2020-08-14 13:32:44
添加引用 <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-quartz </artifactId> </dependency> QuartzFactory类:主要用于解决springboot quartz job 无法注入bean的问题。 package com.example.springboot ; import org.quartz.spi.TriggerFiredBundle ; import org.springframework.beans.factory.config.AutowireCapableBeanFactory ; import org.springframework.scheduling.quartz.AdaptableJobFactory ; import org.springframework.stereotype. Component ; @Component public class QuartzFactory extends AdaptableJobFactory { /** * AutowireCapableBeanFactory 接口是 BeanFactory 的子类 * 可以连接和填充那些生命周期不被

spring boot +vue 导出excal之poi

爷,独闯天下 提交于 2020-08-14 10:58:00
java代码: 1、pom <!-- poi --> < dependency > < groupId >org.apache.poi</ groupId > < artifactId >poi</ artifactId > < version >3.17</ version > </ dependency > < dependency > < groupId >org.apache.poi</ groupId > < artifactId >poi-ooxml</ artifactId > < version >3.17</ version > </ dependency > 2、导出工具类 ExportExcelUtils 注:其中一些背景色不显示可能是HSSFColor对xsl的兼容性问题 具体到什么包就不说了(pom引对应该都没问题) package com.hsing.wooxabbs.common.utils ; import com.alibaba.excel.EasyExcel ; import com.alibaba.excel.support.ExcelTypeEnum ; import com.hsing.wooxabbs.entity.User ; import lombok.extern.slf4j. Slf4j ; import org.apache

spring boot war包改成jar包

浪子不回头ぞ 提交于 2020-08-13 18:34:50
war包配置: <?xml version="1.0"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.easytoolsoft</groupId> <artifactId>easyreport</artifactId> <version>2.0-SNAPSHOT</version> </parent> <artifactId>easyreport-web</artifactId> <packaging>war</packaging> <name>easyreport-web</name> <description>Web view module</description> <dependencies> <!-- easyreport modules --> <dependency> <groupId>com

Java实现大批量数据导入导出(100W以上) -(一)导入

怎甘沉沦 提交于 2020-08-13 14:39:06
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库。可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库。 大数据量报表导出请参考: Java实现大批量数据导入导出(100W以上) -(二)导出 一、为什么一定要在代码实现 说说为什么不能通过SQL直接导入到数据库,而是通过程序实现: 1. 首先,这个导入功能开始提供页面导入,只是开始业务方保证的一次只有<3W的数据导入; 2. 其次,业务方导入的内容需要做校验,比如门店号,商品号等是否系统存在,需要程序校验; 3. 最后,业务方导入的都是编码,数据库中还要存入对应名称,方便后期查询,SQL导入也是无法实现的。 基于以上上三点,就无法直接通过SQL语句导入数据库。那就只能老老实实的想办法通过程序实现。 二、程序实现有以下技术难点 1. 一次读取这么大的数据量,肯定会导致服务器内存溢出; 2. 调用接口保存一次传输数据量太大,网络传输压力会很大; 3. 最终通过SQL一次批量插入,对数据库压力也比较大,如果业务同时操作这个表数据,很容易造成死锁。 三、解决思路 根据列举的技术难点我的解决思路是: 1. 既然一次读取整个导入文件,那就先将文件流上传到服务器磁盘,然后分批从磁盘读取(支持多线程读取),这样就防止内存溢出; 2. 调用插入数据库接口也是根据分批读取的内容进行调用; 3.

多数据源配置方式

与世无争的帅哥 提交于 2020-08-13 13:42:40
一、pom.xml引入配置包 <!--多数据源配置--> <dependency> <groupId> com.baomidou </groupId> <artifactId> dynamic-datasource-spring-boot-starter </artifactId> <version> 2.2.3 </version> </dependency> 二、yml增加配置 spring : application : name : kzj-erp-bls datasource : # 使用druid数据源 druid : stat-view-servlet : loginUsername : admin loginPassword : 123456 dynamic : datasource : master : url : jdbc:sqlserver://192.168.60.2:1466;DatabaseName=master driver-class-name : com.microsoft.sqlserver.jdbc.SQLServerDriver username : sa password : 123456 druid : #以下均为默认值 initial-size : 3 max-active : 8 min-idle : 2 max-wait : -1

SpringCloud微服务:基于Nacos组件,整合Dubbo框架

旧城冷巷雨未停 提交于 2020-08-12 20:24:30
源码地址: GitHub·点这里 || GitEE·点这里 一、基础组件简介 1、Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服务下成熟的技术栈,但是Dubbo本身确实是非常优秀的框架。 常见的应用迭代和升级的过程基本如下: 当应用访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。 随着垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。 伴随业务发展,服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。 而Dubbo框架的核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。正好可以解决上述业务发展的痛点。 2、微服务框架 SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线