《🌹从零搭建开发脚手架》
文章平均质量分 79
了解整个web项目开发的内与外
理论和实践的结合
配套源码:https://gitee.com/lakernote/easy-admin
lakernote
不停的复盘自己,砥砺前行,不忘初衷
展开
-
从零搭建开发脚手架 使用JMH对Java中的某个方法或代码块做性能测试
声明一个public方法为基准测试方法。生命在类上,该类下的所有被@Benchmark注解的方法都会执行。可以用在类上和方法上。原创 2023-12-02 16:45:44 · 1125 阅读 · 0 评论 -
从零搭建开发脚手架 顺应潮流开启升级 - SpringBoot 从2.x 升级到3.x
之前的SpringBoot starter插件自动注册原理是依赖。移除Druid连接池(当前不支持SpringBoot3)升级JDK 8 -> JDK17。组件,可以在项目某个模块的。原创 2023-09-26 15:20:36 · 515 阅读 · 0 评论 -
从零搭建开发脚手架 自定义打包构建研发输出产物
在打包项目时,通常只需要生成一个可执行的jar文件。然而,有时候需要将启动脚本或外部配置文件附加到该jar文件中,这时候就可以使用。此工具可以根据自己的需求将所需的文件打包到指定的目录中。配置assembly.xml文件路径。原创 2023-04-24 15:08:24 · 508 阅读 · 0 评论 -
从零搭建开发脚手架 异步线程池场景下增强Trace功能
下面两篇文章是之前写的trace功能的基础和原理。但是在业务中有异步线程场景下,trace功能有点儿瑕疵,具体看下面的描述。我们看到日志有两个问题。原创 2023-04-15 21:28:24 · 596 阅读 · 0 评论 -
从零搭建开发脚手架 验证码出不来并报错cannont invoke ScriptEngine error
经过百度了解JavaScript引擎在Java高版本移除掉了,所以报这个错误。原创 2023-04-14 13:42:23 · 386 阅读 · 0 评论 -
从零搭建开发脚手架 Maven 构建错误 Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:3.1.0
然后在idea总重新加载maven项目。原创 2023-04-14 13:24:56 · 174 阅读 · 0 评论 -
从零搭建开发脚手架 Spring手动回滚事务
使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();@Transactional必不可少。原创 2022-12-14 12:44:37 · 280 阅读 · 0 评论 -
从零搭建开发脚手架 注意Logback多个配置文档导致配置紊乱问题
最近项目中出现个问题,自定义的不生效,排查发现项目中出现了2个,另一个在依赖Jar中,使用的在依赖Jar中的,导致我们自定义的配置无法生效。最好不要将配置文件打包到jar包中,因为增加配置文件本质上就是为了方便用户调整参数配置。如果将它打包到jar包中,你需要修改指定的文件并从新打包,上线。.原创 2022-11-29 11:25:32 · 1213 阅读 · 1 评论 -
从零搭建开发脚手架 自定义HandlerMethodArgumentResolver-注解@JsonArg和实体CurrentUser
参数绑定时springmvc会对从前端传来的参数自动转化成方法定义的参数的类型,我们可自己定义此接口来实现自己的类型的转换。HandlerMethodArgumentResolver是什么?它是springmvc提供的入参解析器,像平常应用的注解@RequestParam @PathVariable @ModelAttribute …等等修饰在@RequestMapping下的参数上都可以用HandlerMethodArgumentResolver来解析。原创 2022-11-28 17:29:55 · 487 阅读 · 0 评论 -
从零搭建开发脚手架 SpringMvc中枚举类型参数的序列化和反序列化
以下是我们一般的枚举类配合SpringMvc使用方式。默认所有的参数和响应都是。原创 2022-11-25 23:22:55 · 963 阅读 · 0 评论 -
从零搭建开发脚手架 Logback使用janino实现条件判断
文章目录引入依赖语法条件表达式property() or p()isDefined()isNull()变量定义变量1.可以直接在 logback.xml 中定义变量2.可以通过启动参数大D来定义3.可以通过外部文件来定义变量作用域变量的默认值实战1.读取上下文变量的值2.读取系统变量的值附加:环境变量和系统变量的区别引入依赖<dependency> <groupId>org.codehaus.janino</groupId> <artifactI原创 2022-11-23 16:57:32 · 1261 阅读 · 0 评论 -
从零搭建开发脚手架 如何在过滤器filter中获取controller上的注解
你可能会说直接在拦截器或者里面获取不就行了?是的在拦截器和里面是很容的获取到class、method,但是不得不说有些场景还是需要在中去获取的。原创 2022-11-15 13:36:12 · 3462 阅读 · 8 评论 -
从零搭建开发脚手架 Java多返回值tuple
在service中,我们经常遇到需要多返回值的情况,例如同时返回data,success,msg。这个时候我们可能会偷懒,使用map或者直接包装一个对象返回。那么我们能不能搞一个复用的结构对象呢?来满足复用、语义清晰的要求。原创 2022-11-08 10:58:11 · 336 阅读 · 0 评论 -
从零搭建开发脚手架 注意System.currentTimeMillis()和System.nanoTime()的选择
该方法可以用来计算当前日期,当前星期几等,与Date的换算非常方便,JDK提供了相关的接口来换算。该返回值表示从某个固定但任意的原点时间(可能在未来,所以值可能是负数)开始的纳秒数。从源码中可以看到,这个方式是一个native方法,该值由底层提供。在同一个JVM中,不同的地方使用的原点时间是一样的。该方法返回当前时间,以毫秒为单位。,可以在系统设置中进行设置和修改。该方法返回相对时间,以纳秒为单位。仅仅用于测量已经逝去的时间,并且。记录的是系统时间距离。),也就是我们常说的。通过该方法获取的值的。原创 2022-11-04 22:02:20 · 402 阅读 · 0 评论 -
从零搭建开发脚手架 获取Java对象占用JVM内存大小
的全称是Java Object Layout。是一个用来分析JVM中Object布局的小工具。包括Object在内存中的占用情况,实例对象的引用情况等等。个内部对象,总共大小为。原创 2022-10-31 13:26:38 · 205 阅读 · 0 评论 -
从零搭建开发脚手架 本地事务和远程调用等操作的剥离
发生,数据库连接得不到释放,引发无法获取数据库连接,则系统操作就会block住。等核心接口,开发者完全可以通过编程的方式来进行事务管理。在项目编码中会遇到下面的场景,在事务方法中,夹杂着。Spring提供了很好事务管理机制,主要分为。当网络存在波动或者大量call可能会导致。我们分表用两种方式来实现。spring事务提供扩展。基于底层的API,如。原创 2022-09-13 13:57:28 · 576 阅读 · 1 评论 -
从零搭建开发脚手架 Logback异常堆栈剔除一些不关心的类
对满足指定表达式的日志进行记录(或不记录),对不满足指定表达式的日志不作记录(或进行记录).需要额外的两个JAR包,commons-compiler.jar和janino.jar。包含了很多spring.aop相关的类,其实我们不关心,会导致很多内容不好过滤。其中expression为java代码可直接使用java中方法。...原创 2022-08-18 17:17:02 · 687 阅读 · 0 评论 -
从零搭建开发脚手架 轻量级链路追踪Trace
例如花费了3秒,我们想知道这3秒具体花费在哪里,整体链路中的每个环节的耗时是多少?等成熟的链路产品肯定是可行的,但是有些场景也是需要轻量级方案的。原创 2022-08-11 19:55:50 · 596 阅读 · 0 评论 -
从零搭建开发脚手架 集成Spring Retry实现失败重试和熔断器模式
注解的方法保持一致,第一入参为要重试的异常,其他参数与@Retryable保持一致,返回值也要一样,否则无法执行!在openTimeout1s时间内,触发异常超过2次,断路器打开,testCircuitBreaker业务方法不允许执行,直接执行恢复方法recover。熔断模式指在具体的重试机制下失败后打开断路器,过了一段时间,断路器进入半开状态,允许一个进入重试,若失败再次进入断路器,成功则关闭断路器,注解为。定义2个springBean,一个用于重试,一个用于熔断,且是熔断包含着重试,否则会失效。....原创 2022-07-16 20:40:15 · 563 阅读 · 0 评论 -
从零搭建开发脚手架 Spring Boot配置扫描多个包目录的多种姿势
默认是扫描当前application启动类所在的包及其子包例如我们的代码如下:其内部原理,其实用的就是注解。如果我们想扫描其他的多个包目录应该怎么做呢?例如,扫描下面2个包。方式一 方式二 原理跟方式一相同方式三 原理跟方式一相同详解由上可知都是基于注解做的,那么我们来看下它是如何使用的。注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。注解代码如下:注意看里面的注释,非常详细。场景以下是项目中可原创 2022-06-08 23:25:51 · 6360 阅读 · 1 评论 -
Spring Boot Actuator + InfluxDB + Grafana 指标监控入门篇
文章目录InfluxDB简介安装配置文件启动常用命令用户管理保存策略数据库、表数据连续查询(Continuous Queries)常用函数常用查询可视化工具参考Spring Boot Actuator集成增加依赖增加配置文件启动验证查看Influx命令行查看可视化查看MicrometerGrafana安装启动Grafana使用配置数据源创建大屏Dashboard市场Spring Boot micrometer大屏配置告警本篇只搞默认的指标,业务指标后面再开一篇。所有需要下载的都可以去官网或者我的CSD原创 2022-05-28 23:29:56 · 988 阅读 · 0 评论 -
手撸一个Spring Boot Starter并上传到Maven中央仓库
文章目录先手撸一个Spring Boot Starter打包上传到中央仓库第一步 在issues.sonatype.org注册一个账号第二步 在issues.sonatype.org提交Issue第三步 配置Maven Setting.xml第四步 配置项目的pom.xmlJavadoc、源附件、GPG 签名组件项目名称、描述和 URl开源协议开发者信息项目信息整体示例第五步 安装和配置GPG第六步 项目打包上传第七步 处理验证问题我1.0.1版本发布错了,有办法修改或者删除吗?先手撸一个Spring B原创 2022-05-25 21:11:34 · 685 阅读 · 0 评论 -
从零搭建开发脚手架 SpringBoot自定义配置的多种姿势及Idea自动提示
文章目录背景获取配置方式方式一:@Value注解方式二:@ConfigurationProperties注解(建议)方式三:Environment接口自定义配置文件laker.properties自定义配置文件laker.ymlIDEA自动提示功能1.添加依赖2.添加配置类3.在application.yml中测试自动提示原理配置优先级背景日常开发中,经常会使用到自定义配置,例如在常用的application.yml中增加配置,在命令行中进行配置覆盖,以及外部的自定义xxx.properties等。原创 2022-05-22 00:49:05 · 1249 阅读 · 0 评论 -
从零搭建开发脚手架 细说权限管理ACL RBAC 按钮 接口 数据权限等
文章目录权限是什么?权限的方法论权限功能权限模型ACLRBAC实践一般数据权限需求实现原理SQL改造拦截时机基于MP的实现1.0版本2.0版本验证权限简单查询分页查询多表查询相关代码已上传:https://gitee.com/lakernote/easy-admin已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin权限是什么?为了解决用户和资源的操作关系, 让指定的用户,只能操作指定的资源。权限原创 2022-05-08 21:30:34 · 2000 阅读 · 1 评论 -
从零搭建开发脚手架 集成Spring Boot Actuator监控搞起来
文章目录集成引入依赖配置文件访问验证端点 EndpointsHealthInfo安全高级自定义健康检查自定义metrics指标PID PORT过程监控自定义管理端点路径自定义管理服务器端口暴露数据给Prometheus集成引入依赖在项目的pom.xml中增加以下依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-原创 2022-05-01 09:00:00 · 1274 阅读 · 0 评论 -
从零搭建开发脚手架 一定要自定义扩展线程池哦
文章目录背景问题问题1 默认线程池问题FixedThreadPoolCachedThreadPool解决问题问题2 无感知吞异常问题解决方案问题3 ThreadLocal在遇到线程池后参数无法传递问题解决方案背景为什么我们一定要自定义扩展线程池呢,我总结了以下几点原因:1.正如阿里巴巴开发指南指出的,默认的几个线程池都存在一些问题,必须要自定义使用。2.使用线程池的时候总会遇到子线程异常被吞掉的问题,导致我们很难排查问题。3.ThreadLocal在遇到线程池后参数无法传递问题。目前就总结出原创 2022-04-30 19:30:28 · 501 阅读 · 0 评论 -
从零搭建开发脚手架 集成UReport2高性能报表引擎
文章目录快速集成报表存储目录配置配置报表数据源设计报表结果展示相关代码已上传:https://gitee.com/lakernote/easy-admin已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin集成方式:Springboot2 集成UReport2的2种方式详情学习地址:https://www.w3cschool.cn/ureport/ureport-jaod2h8k.htmlGithu原创 2022-03-22 19:14:50 · 2579 阅读 · 3 评论 -
Spring Boot 自定义过滤器并指定其调用顺序的多种姿势
文章目录1. 前言2. 定义过滤器2.1 @Component+@Order()2.2 @WebFilter+@ServletComponentScan2.3 FilterRegistrationBean3. 总结1. 前言我们在项目开发的时候有时候,有的需求场景可能需要自定义过滤器并指定其调用顺序,那么应该怎么快速解决这个问题呢?来看看下面的操作吧,非常的优雅,有3种方式。2. 定义过滤器2.1 @Component+@Order()用spring容器识别处理,代码如下:@Component原创 2020-12-15 19:17:42 · 2349 阅读 · 2 评论 -
从零搭建开发脚手架 利用路径匹配AntPathMatcher自定义url匹配业务
SpringMVC的路径匹配规则是依照Ant,具体代码为: org.springframework.util.AntPathMatcher.? 匹配1个字符* 匹配0个或多个字符** 匹配路径中的0个或多个目录{spring:[a-z]+} 将正则表达式[a-z]+匹配到的值,赋值给名为 spring 的路径变量.(PS:必须是完全匹配才行,在SpringMVC中只有完全匹配才会进入controller层的方法)在实际业务场景中经常会遇到自定义url规则匹配,做一些自定义逻辑,例如// 全局原创 2022-01-07 14:10:41 · 683 阅读 · 0 评论 -
从零搭建开发脚手架 踩坑之MybatisPlus的entity对象中千万不要设置默认值
背景发现数据库中的字段值,总是被莫名其妙的更新了。user_idnick_namedept_id1test1例如上面的sys_user用户表,id为1的用户test,其部门id被莫名更新为0了。过程用户实体用户表,举例,这里设置用户的部门id默认为0L。@Datapublic class SysUser implements Serializable { @TableId(value = "user_id", type = IdType.AUTO)原创 2021-12-30 14:50:39 · 1351 阅读 · 0 评论 -
从零搭建开发脚手架 Gitee源码学习 仓库代码Fork后如何同步源的更新
文章目录背景问题方案1.fork后创建自己的分支:laker2.master强制拉取3.master与laker分支进行Pull Request背景我看见了一个开源项目想要学习,如:https://gitee.com/lakernote/easy-admin然后,我fork了它, 自己远端库地址,如: https://gitee.com/xxx/easy-admin。问题我在自己的xxx/easy-admin库改啊改,某一天源库lakernote/easy-admin更新了,我怎么同步源库过原创 2021-11-25 19:28:51 · 1271 阅读 · 0 评论 -
从零搭建开发脚手架 Mybatis Plus 多条件、多表关联、动态SQL、分页复杂查询实战总结
Mybatis Plus 多条件、多表关联、动态SQL、分页复杂查询实战总结前言废话不多说,直接写结论。查询参数总结分页参数current 当前页,默认:1size 每页显示条数,默认:10排序参数排序字段和排序类型create_time desc,user_no原创 2021-11-20 20:54:22 · 1656 阅读 · 0 评论 -
从零搭建开发脚手架 实现监控日志与业务日志文件分离输出
文章目录背景拦截器代码application.yml配置logback-spring.xml配置扩展背景为了更方便的监控线上的系统运行情况,把业务日志和监控日志进行分离,效果如下,不多比比。business-core.log 业务日志business-core-20211101.log 业务日志metrics.log 监控度量日志metrics-20211101.log 监控度量日志业务日志都打印到business-core相关文件,每天按10M大小切分,监控度量日志打印到metrics原创 2021-11-11 15:20:59 · 2407 阅读 · 0 评论 -
从零搭建开发脚手架 权限管理之数据权限介绍
文章目录背景指南第一步 使用超管账户登录第二步 添加数据资源第三步 配置角色和数据权限关系第四步 配置用户和角色关系第五步 登录验证已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin背景easy-admin权限管理这边都是基于角色的权限控制,菜单、接口、数据都看做是资源,具体分为菜单权限,某用户,某角色能看到某菜单,例如:超管能看到所有的菜单,普通员工只能看到请假菜单接口权限,某用户,某角色能操原创 2021-10-20 22:35:05 · 754 阅读 · 0 评论 -
从零搭建开发脚手架 权限管理之接口权限介绍
文章目录背景指南第一步 使用超管账户登录第二步 添加接口资源第三步 配置角色和菜单关系第四步 配置用户和角色关系第五步 登录验证已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin背景easy-admin权限管理这边都是基于角色的权限控制,菜单、接口、数据都看做是资源,具体分为菜单权限,某用户,某角色能看到某菜单,例如:超管能看到所有的菜单,普通员工只能看到请假菜单接口权限,某用户,某角色能操作某原创 2021-10-20 21:49:17 · 682 阅读 · 0 评论 -
从零搭建开发脚手架 权限管理之菜单权限介绍
文章目录背景指南第一步 使用超管账户登录第二步 添加目录和菜单资源第三步 配置角色和菜单关系第四步 配置用户和角色关系第五步 登录验证已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin背景easy-admin权限管理这边都是基于角色的权限控制,菜单、接口、数据都看做是资源,具体分为菜单权限,某用户,某角色能看到某菜单,例如:超管能看到所有的菜单,普通员工只能看到请假菜单接口权限,某用户,某角色能原创 2021-10-20 21:28:48 · 697 阅读 · 0 评论 -
从零搭建开发脚手架 Easyadmin部署及部署常见问题解决
文章目录背景????部署教程服务端前端校验☎️常见问题☎️联系方式☎️☎️ ☎️ ☎️ 已开源基于SpringBoot+Mybatisplus+Layui+SnakerFlow前后端分离轻量级工作流引擎的脚手架项目 easy-admin背景easy-admin开源已有1个多月了,斩获180多个star,期间还伴随着LayUI的官网下架事件,这点非常痛心,但是并不会影响我们的使用和定位。在Gitee的readme我已经写过部署教程了,而且还是比较简单的,最简化不依赖tomcat和nginx,只需要原创 2021-09-28 15:13:05 · 4049 阅读 · 4 评论 -
从零搭建开发脚手架 Druid错误discard long time none received connection
详细错误日志如下:10:58:15.370 WARN --- [nio-8080-exec-6] com.alibaba.druid.pool.DruidAbstractDataSource :1489 discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/laker?serverTimezone=GMT%2B8&characterEncoding=utf原创 2021-09-18 11:11:35 · 1708 阅读 · 0 评论 -
从零搭建开发脚手架 性能优化-1M带宽低配机,通过thumbnailator压缩图片提升性能
背景在我的开源项目EasyAdmin中,服务器是2C2G1M带宽的低配入门机器,然后还部署了大大小小十个左右的服务,所以感觉比较卡。升级配置?对于我这个穷屌丝来说,那是没戏了,只能通过优化系统来提高性能了。这里目前都是带宽流量的优化,毕竟升级带宽是真滴贵。上一篇 从零搭建开发脚手架 性能优化-1M带宽低配机,通过Gzip压缩Json、css、html等提升性能,是压缩文本类内容,但是系统很大一部分是图片信息,这块的压缩也是重中之重,先介绍使用thumbnailator压缩的方案,文末有项目结合的实原创 2021-09-07 18:25:09 · 1130 阅读 · 0 评论 -
从零搭建开发脚手架 Jackson使用心得和常用注解
不要用fastjson,至于为什么,自行百度斟酌Spring Boot使用HttpMessageConverters处理HTTP交换中的内容转换。当classpath中存在Jackson时,Jackson2ObjectMapperBuilder将是默认的Converter.在一个HTTP交互中,Spring MVC(客户端和服务端)使用HttpMessageConverters协商内容转换。如果classpath下存在Jackson,你就获取到Jackson2ObjectMapperBuilder提.原创 2021-09-06 09:29:26 · 1309 阅读 · 0 评论