slf4j

推荐一个基于 SpringBoot2 + MybatisPlus 的商城管理系统

女生的网名这么多〃 提交于 2020-12-11 17:43:05
项目简介 SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue 的前后端分离的商城系统, 包含商城、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销、会员、充值、多门店等功能,更适合企业或个人二次开发。 商城功能 商品模块:商品添加、规格设置,商品上下架等 订单模块:下单、购物车、支付,发货、收货、评价、退款等 营销模块:积分、优惠券、分销、砍价、拼团、秒杀、多门店等 微信模块:自定义菜单、自动回复、微信授权、图文管理、模板消息推送 配置模块:各种配置 用户模块:登陆、注册、会员卡、充值等 其他等 项目结构 项目采用分模块开发方式 yshop-weixin 微信相关模块 yshop-common 公共模块 yshop-admin 后台模块 yshop-logging 日志模块 yshop-tools 第三方工具模块 yshop-generator 代码生成模块 yshop-shop 商城模块 yshop-mproot mybatisPlus 系统预览 技术选型 后端使用技术 1.1 SpringBoot2 1.2 mybatis、MyBatis-Plus 1.3 SpringSecurity 1.5 Druid 1.6 Slf4j 1.7 Fastjson 1.8 JWT 1.9 Redis 1.10 Quartz 1.11

微服务三大利器之限流

∥☆過路亽.° 提交于 2020-12-11 05:47:03
背景 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存:提升系统访问速度和增大系统能处理的容量 降级:当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 限流:解决服务雪崩,级联服务发生阻塞时,及时熔断,防止请求堆积消耗占用系统的线程、IO等资源,造成其他级联服务所在服务器的崩溃 这里我们主要说一下限流,限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。 首先,我们需要去了解最基本的两种限流算法。 限流算法 漏桶算法 令牌桶算法 计算器算法 这里主要是提一下,详细了解限流算法请参考下面链接 https://www.cnblogs.com/hopeiscoming/p/12297528.html 限流框架 下面说一下现有流行的限流工具 guava Google的Guava工具包中就提供了一个限流工具类——RateLimiter。RateLimiter是基于“令牌通算法”来实现限流的。 hystrix hystrix主要是通过资源池以及信号量来限流,暂时能支持简单的限流 sentinel 限流比较主流的三种算法:漏桶,令牌桶,滑动窗口。而Sentinel采用的是最后一种,滑动窗口来实现限流的。当然sentinel不仅仅局限于限流

log4j2 的使用【超详细图文】

柔情痞子 提交于 2020-12-08 02:12:33
log4j2 的使用 Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有: 异常处理,在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。 性能提升,log4j2 相较于log4j 和 logback 都具有明显的性能提升,有18倍性能提升,后面会有官方测试的数据。 自动重载配置,参考了logback的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改日志的级别而不需要重启应用。 无垃圾机制,log4j2 在大部分情况下,都可以使用其设计的一套无垃圾机制【对象重用、内存缓冲】,避免频繁的日志收集导致的 jvm gc。 官网: https://logging.apache.org/log4j/2.x/ 一. Log4j2 入门 目前市面上最主流的日志门面就是SLF4J,虽然Log4j2 也是日志门面,因为它的日志实现功能非常强大,性能优越。所以大家一般还是将 Log4j2 看作是日志的实现, Slf4j + Log4j2 应该是未来的大势所趋 。 1.添加依赖 <dependencies> <!-- log4j2 日志门面 --> <dependency> <groupId>org.apache.logging

Thymeleaf前后端传值 页面取值与js取值

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-06 12:40:54
参考:  Thymeleaf前后端传值 页面取值与js取值      Thymeleaf 与 Javascript Thymeleaf教程 (十二) 标签内,js中使用表达式 目的: 后端通过Model传值到前端 页面通过Model取值显示 js通过Model取值作为变量使用 1.后台Controller @GetMapping("/message") public String getMessage(Model model){ model.addAttribute("message","This is your message"); return "index"; } 注:向model中添加属性message 2.页面通过Model取值 <p th:text="#{message}">default message</p> 3.js通过model取值 <script th:inline="javascript"> var message = [[${message}]]; console.log(message); </script> 注:script标签中 th:inline 一定不能少,通常在取值的前后会加上不同的注释 4.如果前端需要接受的是一个JSON格式的对象,一定不能直接传JSON字符串 可以使用Fastjson将其转换为JSON对象package

Rabbitmq的可靠消息投递

北城以北 提交于 2020-12-06 09:59:18
一、背景 生产端向rabbitmq发送消息时,由于网络等原因可能导致消息发送失败。所以,rabbitmq必须有机制确保消息能准确到达mq,如果不能到达,必须反馈给生产端进行重发。 RabbitMQ消息的可靠性投递主要两种实现: 1、通过实现消费的重试机制,通过@Retryable来实现重试,可以设置重试次数和重试频率; 2、生产端实现消息可靠性投递。 两种方法消费端都可能收到重复消息,要求消费端必须实现幂等性消费。 二、消息投递到exchange的确认模式 rabbitmq的消息投递的过程为: producer ——> rabbitmq broker cluster ——> exchange ——> queue ——> consumer 1、生产端发送消息到rabbitmq broker cluster后,异步接受从rabbitmq返回的ack确认信息。 2、生产端收到返回的ack确认消息后,根据ack是true还是false,调用confirmCallback接口进行处理。 在application.yml中开启生产端confirm模式 spring: rabbitmq: publisher -confirms: true 实现ConfirmCallback接口中的confirm方法,ack为true表示消息发送成功,ack为false表示消息发送失败 @Component

log4j2配置文件log4j2.xml

送分小仙女□ 提交于 2020-12-06 03:14:34
一、背景   最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置( 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案 )以及log4j2配置文件的详解,就需要我们来好好聊一聊了。本文就专门来讲解下log4j2.xml配置文件的各项标签的意义。 二、配置全解   1.关于配置文件的名称以及在项目中的存放位置     log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".     系统选择配置文件的优先级(从先到后)如下:       (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.       (2).classpath下的名为log4j2-test.xml的文件.       (3).classpath下名为log4j2.json 或者log4j2.jsn的文件.       (4).classpath下名为log4j2.xml的文件.      我们一般默认使用log4j2.xml进行命名。如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml

三分钟学会《门面模式》

为君一笑 提交于 2020-12-06 00:41:41
前言 只有光头才能变强 回顾前面所写过的设计模式: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 策略模式原来就这么简单! 无论是面试还是个人的提升,设计模式是必学的。今天来讲解 门面 (外观)模式~ 上一次分享了一篇好文:《 为什么阿里巴巴禁止工程师直接使用日志系统(Log4j、Logback)中的 API 》 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API, 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 。 不知道大家有没有了解过门面模式,我去翻了一下《设计模式之禅》,发现非常简单,所以在这给大家分享一下。 一、门面(外观)模式介绍 1.1门面模式现实例子 一个电源总开关可以 控制所有电器 的打开或关闭状态。 无论是空调、冰箱、电视、电脑、风扇等等,只要是电器都受这个电闸控制。只要这个电闸将关闭,所有的电器都会受到牵连(一同关闭)。 电源总开关(电闸)即为该系统的外观模式设计。 1.2回到代码世界 比如,我们家里现在有空调、冰箱、电脑这么几个电器 // 冰箱 public class Fridge { // 关闭冰箱 public void turnOff() { } // 开冰箱灯..减低冰箱温度..调高冰箱温度... } // 电视

[日志] spring boot + logback 日志输出配置

 ̄綄美尐妖づ 提交于 2020-12-05 22:03:06
一、输出日志到控制台 springboot有很多starter(参考 starter )方便快速构建项目依赖组件,logback是springboot默认的日志组件,启动即可看到打印在控制台输出的info级别的日志: 2018-01-14 20:17:19.831 INFO 32976 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2018-01-14 20:17:19.832 INFO 32976 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web

『互联网架构』软件架构-java日志体系(17)

ε祈祈猫儿з 提交于 2020-12-05 10:37:04
了解过为什么日志体系那么多的jar包,系统放几天日志就把线上磁盘给打爆了。具体怎么配置使用log,有的配置是Info是一个日志,error是一个日志,查找非常的烦,如果线上不出问题,我们很少管,如果出问题了,找不到对应的日志真是烦透了。如果是分布式开发,日志管理如果不使用elk这种统一工具,分散在不同的机器上,有10台机器需要去10台机器轮流找日志,是不是很麻烦,今天就一次性的吧整个日志体系搞明白。 JAVA当中有哪些日志打印的组件 名称 描述 log4j logback log4j2 java.util.logging 假设Spring 框架要打印日志,应该选择中其中哪一个组件? 发现哪个都不能选,只能基于应用实际使用的日志组件来。不然就会日志打印会多份。怎么找到应用实际使用的日志组件 Apache Commons Loging 解决了这个问题 Apache Commons Loging (JCL) Commons Loging 本身只提供日志接口,具体实现在运行时动态寻找对应组件?比如:log4j、jdk14looger 等。但这种动态绑定的方式当系统特别宠大的时候会出现绑定失败的问题。现在比较流行的slf4j 基于静态绑定的方式解决了这个问题? slf4j sl4j 本身也只提供日志接口,与commons loging 不同的是其采用在classPath

Log4j2/Slf4j and Java 11

孤人 提交于 2020-12-05 07:01:42
问题 I'm currently trying to build an app with log4j/slf4j and java 11 but I'm facing this problem at runtime: 2018-12-10 22:09:27,225 main INFO Cannot initialize scripting support because this JRE does not support it. java.lang.NoClassDefFoundError: javax/script/ScriptEngineManager at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.script.ScriptManager.<init>(ScriptManager.java:69) at org.apache.logging.log4j.core@2.11.1/org.apache.logging.log4j.core.config