
Jakarta EE
文章平均质量分 95
Java EE和Jakarta EE相关组件实践记录
JackSparrow414
认真对待问题、思考问题、解决问题
展开
-
JMX Exporter源码解读+生产环境最佳实践+解决其抓取指标超时问题
在这一版的配置中,我没有将所有的MBean的不关心的Attribute都配置上,仅配置了jvm相关的MBean和部分MBean,主要是拿这一版的配置来验证下我的猜想。还有一个问题,由于我们代码中使用Ehcache,每一个Cache都会注册自己的MBean到JMX中,所以Cache非常多的时候,JMX里的MBean是非常多的。既然还是超时,我认为问题可能出在jvm本身收集的指标太多了,一旦jvm负载较高,有可能增加查询MBean的时间,我决定直接将源码中JavaAgent的。负责真正的MBean查询。原创 2024-11-15 19:32:08 · 820 阅读 · 0 评论 -
Jdbc流式读取及后续流式处理的正确方式及示例
JDBC流式读取原创 2024-03-09 21:02:59 · 2122 阅读 · 0 评论 -
用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路
本博文没有对JMeter中的各个组件及其概念做过多介绍,我认为,这些基础的东西看看官方文档,自己多配置几个脚本就基本知道这些组件到底是干嘛的了,官方文档已经是最精华的教学文档了,我就不必在这里再次赘述了。希望想要学习JMeter的同学,多读官方文档,遇到概念不清楚、配置不清楚的问题按图索骥即可。刚上手的同学建议多读FAQ以及Best Practices部分。原创 2023-10-05 15:13:30 · 2889 阅读 · 1 评论 -
Log4j2的使用(三)不同的环境使用不同的配置
上面两种方式适合新项目适和部署周期较短的项目。由于上面两种方式需要在JVM启动的时候添加额外的参数,那这一部分工作是由运维来负责,虽然只是添加一个参数,假设服务器数量较多,那么代码需要等到JVM参数添加到所有服务器之后才可以,也就相当于部署了两次。在这种背景下,我在想,能不能把设置查找SystemProperty这一部分工作也在代码里完成呢?好在Log4j2提供了Plugins机制,允许我们可以自己拓展} else {} }原创 2023-07-15 13:01:19 · 2217 阅读 · 1 评论 -
Eclipse Krazo(Jakarta MVC)的使用
虽然官方提供了一个默认的实现CsrfExceptionMapper,但是我们想CSRF校验失败时,自己控制跳到自己项目里的页面// 两种写法都可以 // servletContext.getRequestDispatcher("/WEB-INF/views/csrf.jsp").forward(request, response);} }csrf校验失败:原创 2023-06-17 17:58:40 · 1158 阅读 · 0 评论 -
自定义springboot yaml配置
如何自定义属于自己的springboot yml配置呢?在实践过程中又有哪些规范需要遵守?本文以自己实践的过程为基础,将思路分享给大家原创 2020-05-31 13:13:22 · 1486 阅读 · 0 评论 -
Spring的属性注入是如何执行的?
上一篇文章已经搞清楚了Spring是什么时候注册、创建、以及实例化bean的,那么对于Class A中存在属性 Class B,那么Class B是怎么注入到A中的呢?public class UserServiceImpl { private SchoolServiceImpl schoolService; public String getSchoolServiceMethod(){ return schoolService.getTimeStr(); }原创 2020-05-17 11:01:23 · 635 阅读 · 0 评论 -
Spring什么时候实例化Bean的?
今天忽然想到一个问题,Spring是什么时候实例化Bean的?1、是spring容器启动的时候?2、还是第一次用到bean的时候实例化?于是决定看一下源码N年以前,spring还没有现在这么强大的时候,我们是如何使用spring的呢?使用XML文件配置,如下:public class SchoolServiceImpl { public String getTimeStr(){ return LocalDateTime.now().format(DateTim原创 2020-05-16 20:47:33 · 2652 阅读 · 4 评论 -
Maven学习与理解(彻底理解Maven)
彻底学习、理解Maven;不再为如何配置Maven插件各种百度;诸多实践场景原创 2021-01-31 14:24:10 · 2586 阅读 · 2 评论 -
Spring的Ioc的理解
前两篇文章中,大致分析了spring是如何注册、创建、实例化bean的。搞清楚这些之后,其实对于Ioc的理解就特别清楚了。Ioc(控制反转)也叫DI(依赖注入),个人觉得依赖注入比较好理解,因为从前两篇文章可以知道,spring完成的工作就是实例化Bean,在实例化该Bean的过程中,其依赖的另一个Bean才被设置进来或者创建。所以依赖注入比较好理解一些。官方文档解释如下:所以Spring完成的工作基本是两大部分1、创建bean对象:官方创建bean对象的文档地址创建一个对象时,原创 2020-05-17 12:16:23 · 437 阅读 · 0 评论 -
自定义Spring-boot-starter
文章目录自定义Spring Boot AutoConfiguration和Spring-boot-starter前言场景官方文档设计结构编码引入依赖编写自定义属性文件spring-configuration-metadata.json建立自定义属性映射的Java类建立自动配置类目标Java类建立spring.factories整个项目结构图测试实际使用引入依赖配置属性启动项目使用自定义配置覆盖默认配置结束项目中用到的代码使用须知自定义Spring Boot AutoConfiguration和Spring原创 2021-02-05 15:39:01 · 276 阅读 · 0 评论 -
Hibernate-Validator的使用(一)
key用{}括起来}这里定义两个文件ValidationMessages_zh_CN.properties和ValidationMessages_en_US.properties来做测试。二者均放在resource目录下ValidationMessages_en_US.properties的内容userName.invalid= userName ${validatedValue} is invalid。原创 2022-12-25 21:58:11 · 2467 阅读 · 0 评论 -
Log4j2的使用(二)动态修改日志级别
在实际生产环境中,我们一般配置的日志级别为INFO或者WARN级别及以上。当生产环境某项业务忽然出现问题,此时看WARN日志找不出什么线索,最好能在不重启服务器的情况下,将WARN级别改为DEBUG级别,查看更多的日志来判断情况。这就需要能够动态调整Log4j2的日志级别Log4j2官方提供了对JMX的支持,可以很方便的进行配置的修改启动应用启动JConsole,并点击MBean一栏找到log4j2的MBean,通过getConfigText获取此时的配置此时访问应用,日志会打印出INFO级别的日志,说明原创 2022-06-20 19:41:15 · 2008 阅读 · 0 评论 -
Log4j2的理解与使用(一)
文章目录Log4j2和Slf4j理解Log4j2的架构了解UML类图UML类图示例UML类图的主要表示方法UML 类图常见的主要有以下几种关系在Markdown中画UML类图理解Log4j2中各个组件的作用LoggerContextConfigurationLoggerLoggerConfigFilterAppenderLayout示例配置Log4j2中的各种桥接器使用异步日志开启异步日志引入依赖启动配置如何确定开启异步日志?好的资源源码仓库关于Log4j2、JUL(java.util.logging)、原创 2022-05-22 19:58:29 · 1676 阅读 · 0 评论 -
SpringBoot使用Velocity发送电子邮件
文章目录使用Velocity发送电子邮件简介Velocity能用来干什么?入门页面引用指令Java代码集成发送电子邮件前提编码配置文件发送邮件发送结果官方文档示例代码使用Velocity发送电子邮件简介Velocity能用来干什么?我认为大家熟知的什么用Velocity页面当做MVC的页面来呈现这种方式,但在当今前后端分离的时代,我觉得很大一部分公司前端页面都是使用的React,Vue等纯前端框架。使用各大模板引擎当做页面应该很少除了这个,官方文档提到了一个很重要的一个应用场景,就是发送电子邮件。原创 2022-03-03 14:23:26 · 2667 阅读 · 0 评论 -
自定义实现OAuth2.0 授权码模式
文章目录OAuth2.0 授权码模式 实践依赖知识术语授权码流程认证服务器拉起请求用户授权页面用户手动授权提交授权、生成code下发Token第三方应用收到code并请求Token访问受保护的资源项目结构项目部署项目完整代码相关文章OAuth2.0 授权码模式 实践本篇文章不适合作为授权码模式的入门文章来阅读,适合想要自己实现授权码模式或体验授权码模式的开发者阅读依赖知识RestEasynimbus-jose-jwtJPACDIjavax.security术语Resource Ow原创 2021-12-15 14:53:56 · 4914 阅读 · 0 评论 -
RestEasy的入门与使用
文章目录RestEasy的入门与使用背景传统ServletJAX-RS和JSR为什么要看规范?简单解读JSR370ApplicationsResourcesProvidersRestEasy的基本使用建立Restful风格的JavaEE应用RestEasy是如何接管了应用呢?接受Restful风格的HTTP请求基本使用进阶使用全局异常的处理备注RestEasy的入门与使用大家在国内IT环境下,用的最多的应该就是SpringBoot,SpringMVC了。但是也有另外一派,就是使用完全实现JavaEE标准原创 2021-12-04 13:49:38 · 4122 阅读 · 6 评论 -
Java EE 官方文档解读
文章目录Java EE 官方文档记录文档地址有意思的话常见用语值得读的章节Java EE 体系JSF部分CDI部分Web Services部分JAXRS部分EJB部分JPA部分Java EE Security 部分问题记录Windows下Tomca启动乱码Windows下安装多个TomcatWindows下安装多个Tomcat的问题解决方案Windows下运行Java EE项目Hibernate资源JavaEE的一些例子有意思的思考?RESTFul中POST和PUT如何抉择?Java EE 官方文档记录原创 2021-11-19 14:59:55 · 1498 阅读 · 0 评论 -
Ehcache 的简单使用
文章目录Ehcache 的简单使用背景使用版本配置配置项编程式配置XML 配置自定义监听器验证示例代码改进代码备注完整示例代码官方文档Ehcache 的简单使用背景当一个JavaEE-Java Enterprise Edition应用想要对热数据(经常被访问,很少被修改的数据)进行缓存时,在遥远的年代,还没有Redis,开发者们想到的是直接利用JDK中的集合进行缓存。随之而来的问题是,JVM内存毕竟有限,如果热数据太多,过期策略、驱逐策略这些都需要开发者手动编写。那么Ehcache是主要解决这类问题的原创 2021-11-14 13:05:45 · 1792 阅读 · 0 评论 -
Spel快速入门及查找手册
文章目录Spel快速查找手册基础知识@Value的两种格式Spel Context的作用取值示例Java对象获取对象中属性获取集合里的对象获取集合里对象的属性获取对象获取对象并调用方法调用工具类的静态方法不经常用,可以了解集合判空集合过滤设值基础类型以及包装类集合设值在属性上调用方法备注示例代码文档Spel快速查找手册此博文为Spel速查手册,用来快速查找平时开发中会出现的Spel。如果需要更详细的代码示例,可在示例代码中找到基础知识@Value的两种格式在Springboot中,@Value有两原创 2021-10-17 12:24:02 · 1631 阅读 · 0 评论 -
Java EE体系快速入门示例
文章目录简单Java EE 应用前提条件须知安装Glassfish下载启动查看日志关闭安装H2数据库下载启动配置H2内存数据库配置JNDI数据源关于JNDI数据源文档在Glassfish Server中配置JDBC连接池在Glassfish Server中配置JDBC连接运行应用安装示例代码IDEA中配置Glassfish查看server日志程序运行截图读者疑问简单Java EE 应用一个很简单的Java EE应用前提条件须知本文使用Java EE版本为8Java EE服务器为Glashfis原创 2021-08-26 14:28:08 · 239 阅读 · 0 评论 -
关于jsp中静态包含和动态包含的说明
开发时需要引入其他jsp页面,这就需要了解jsp中<%include file="***.jsp(后面不可以加参数)"%>和<jsp:include page = "***.jsp" flush = "true">。也就是静态包含和动态包含。网上的他们之间的区别说的有很多,看过之后很快就忘记了,这里只记住一句话,静态包含两个jsp页面用的是同一个servlet,动态包含两...原创 2018-07-10 11:52:39 · 289 阅读 · 0 评论 -
web开发注意的点(一)
1.查看本机ip---在cmd下输入ipconfig/all,会出现一些配置信息:其中IPv4就是你的本机ip。如果要其他人访问你的本地项目,只需要让其他人输入的url为---ip:8080即可。2.查看所有被占用的端口---netstat -ano3.当我们使用myeclipse和idea进行编码工作时,有的时候会tomcat会报出内存不足的错误,如:Exception ...原创 2018-08-20 14:14:40 · 232 阅读 · 0 评论 -
关于Springmvc的自己工作中使用的体会
今天在写代码之后遇到了can not handler "controller名字" to url path.解决了这个问题之后,才发现自己对于SpringMvc的原理掌握的很少,特此记录一下。自己平时的教学视频看了不少,网上的各种原理也看了不少,但是实际应用起来真的没有去用心去想。下面好好记录一下自己对于原理的大致理解。当我们从前台通过URL请求数据时,那么这个URL首先会被spri...原创 2018-12-10 17:39:35 · 711 阅读 · 0 评论 -
关于web中ajax异步交互学习(二)
今天在写代码的问题:前台通过ajax和后台的SSM框架进行交互,进行测试时发现,后台已经正常进入controller,并且正常进入对应的方法,也正确的返回了对应的数据,但是,前台ajax总是会进入到error的function里面。还是老办法,一步一步解决问题。定位问题:既然每次都进error的function里,那我们就吧error的function的参数打印出来,ajax的erro...原创 2018-12-17 16:35:14 · 316 阅读 · 0 评论 -
关于springmvc工作中的体会(2)
问题描述:今天在写参照的时候需要返回一个视图页面,平时自己开发中一般用得最多的就是利用getJspPagePath()这个方法,直接将要展示的视图的路径放到后面做参数拼接。但是这种方式只能定位到当前jsp路径的同一个文件夹下的视图。如果我要是在一个action里去返回其他文件夹下的视图,这样就不能使用getJspPagePath()这个方法了。解决过程:1.首先我的第一想法是利用Mod...原创 2019-01-03 16:08:33 · 201 阅读 · 0 评论 -
关于开发中的Spring(一)
问题描述:今天在写代码的时候,在进行一个保存操作的时候,代码可以成功执行,没有报错,但是数据库里对应的表里没有这条数据,而且,控制台也没有打印出插入的SQL语句。这就很疑惑。为什么不去执行相应的插入逻辑呢,后来问了一下同事,说出原因的那一刻,都感觉自己很蠢。问题原因:在Spring的配置文件中配置了相应的切点,那么我会在在相应的切点执行对应的事务操作。那么这个事务操作平时我们都怎么...原创 2019-01-14 16:51:35 · 818 阅读 · 0 评论 -
Springmvc上传图片
一直想着做一下图片的上传,今天做了一个超级简单版,里面只包括几个核心步骤。这里强调两点,form的enctype一定要为"multipart/form-data",还有一点就是method要为post,如果不写method的话,在上传的时候会报服务器500错误,本人亲自踩坑发现的。如果顺利进入controller其实核心步骤就如下几步:这里注意:如果用的是MultipartFil...原创 2019-02-21 14:32:45 · 226 阅读 · 0 评论 -
关于web项目的首页设置问题
问题描述:简单的项目整体如下图:我想要的效果就是访问项目的时候,如:http:localhost:8080直接跳转到web-inf的index.jsp,而不是另外一个默认的jsp。但是在网上找了好久很多答案(基本为设置tomcat的XML文件或者welcome-file-list或者结合url-pattern使用),都没有效果,后来偶然发现一种方法。其实也就是类似于重新请求一次,可以在...原创 2019-02-20 17:37:58 · 951 阅读 · 0 评论 -
springboot的异步调用@Async和事务@Transactional注解的注意事项
场景描述:我司最近要做一个上传Word转图片,实现预览Word的功能,整体流程为用户前端上传word文件,上传成功之后即提示成功,Java后台异步调用转图片服务。伪代码:controller层:接收上传文件serviceImpl层:1.上传文件->2.上传成功->3.异步调用转图片服务以前只知道springboot中异步调用使用@Async注解,并且被注解标注的方法必须...原创 2019-07-13 11:04:31 · 9194 阅读 · 2 评论 -
关于web中ajax异步交互的学习(一)
平时经常看到当我们在百度的时候,输入一些搜索信息,搜索栏下面就会出现一些与搜索有关的提示信息,这就是很典型的ajax异步交互,我们不用把搜索信息全写完成,然后点击百度一下,当我们输入搜索信息的时候页面就与服务器之间进行了数据的通信,在不刷新页面的情况下出现我们想要的信息,其中的原理便是页面与服务器之间通过ajax进行通信。通常我们用ajax都是通过jQuery中的$.ajax(){ typ...原创 2018-07-10 10:31:07 · 219 阅读 · 0 评论