- Beijing, China
- mynameisny[at]126.com
- https://ningyu.me
-
使用Java Stream将邻接表组装成树
描述 在关系型数据库中保存树形结构最简单、最广泛的设计方案是采用邻接表(Adjacency List),也就是在一行记录中,用一个parent_id字段来引用同一张表的其他记录,比如: id name parent_id 0 中国 null ...
-
如何将Spring Data JPA的分页实体映射为自定义的类型
问题 使用Spring Data JPA可以让操作数据库数据变得极为简单:定义一个实体类、然后再创建一个Interface继承JpaRepository,通过这个Interface的实例便可以对数据库进行增删改查。 1 2 3 4 5 6 7 8 ...
-
在SpringMVC的响应中添加Location响应头
背景 HTTP协议有一个状态码是201(Created),表示请求成功、已在服务器上成功创建资源。这是一个非常实用的HTTP状态码。使用这个语义明确的状态码是远比只返回一个HTTP 200要好的。 假设我们发送一个POST请求来创建一本书: 1 2 3 4...
-
不继承SpringBoot的parent项目
问题 我们在使用 spring initializr 创建SpringBoot项目时,pom.xml文件中默认会继承spring-boot-starter-parent这个父项目: 1 2 3 4 5 6 7 8 9 10 11 12...
-
SpringBoot退出时执行相关代码
背景 我的一个SpringBoot Web应用(简称主应用),收到请求之后,会启动另外一个Java Web应用(简称子应用)。 当我们通过 Ctrl + C 、SpringBoot Actuator的shutdown接入端,或任务管理器“掐”掉我的主应用时,由主应用启动的子应用并不会退出...
-
查看SpringBoot应用的进程号
背景 Springboot应用启动后,需要记录下它的进程id。以便通过PID实现监控和停止等运维工作。 步骤 方案一 创建一个ApplicationPid类的对象(推荐方案): 1 2 3 4 5 6 7 8 9 10 1...
-
使用openjdk docker镜像执行Java程序
背景 我们可以不必在宿主机上安装JDK或JRE,借助OpenJDK的Docker镜像,来运行一个可执行Java程序(SpringBoot Web应用)。 首先从DockerHub上拉取OpenJDK的镜像,因为我使用的技术栈还是Java 8,因此这里的镜像tag使用了8。 ...
-
使用Camunda HTTP Connector发送HTTP请求
配置 添加一个 ServiceTask ,在General面板中implementation的下拉菜单中选择 Conector : 选择Conector之后,会新出现一个Tab页 Connector ,点击切换到这个标签页,在Connector Id输入框中添加 http-con...
-
Spring事务的传播机制
什么是事务传播机制 事务传播机制是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何去执行,例如method1方法添加了事务,去调用了method2事务方法,那么method2是继续在method1的事务中执行,还是新开一个事务时执行,这就需要method2的事务传播机制来决定。 ...
-
找回IDEA调试时的Stop and Rerun提示框
问题描述 使用IDEA来调试SpringBoot应用时,程序运行中我们修改一些代码,然后需要重启应用查看效果,在这种场景下每次点击Debug图标(也就是那个绿色的小虫子按钮)重启服务时,会弹出一个提示框,提示你是否要停止当前的Web服务器运行,然后重新启动它。 这很好理解,不像一个mai...
-
JPA初始化数据
背景 我们常常需要在应用的初始化阶段自动向数据库中插入一些基础数据,比如默认分类或省市信息等。 SpringBoot应用可以通过在application.properties文件中配置 spring.jpa.generate-ddl 和 spring.jpa.hibernate.ddl-...
-
手动控制SpringBoot的RabbitMQ消费者
背景 使用 @RabbitHandler 和@ RabbitListener 注解并指定消息队列后,默认会在应用启动的时候立即就会去消费消息队列中的消息,然而在处理某些场景下,我们可能需要手动停止监听或者手动开始监听,比如我们在调试应用的时候,会经常在本地的IDE中启动项目,这样本地代码和线...
-
maven指定pom.xml文件
问题描述 有的时候在你的项目中需要对Maven进行不同的配置,典型的场景就是在公司和家里会使用不同的代理或者Maven私服或者在使用Jenkins的时候有时候需要使用固定位置的pom.xml文件。 解决方案 是使用 mvn 命令时,使用-f参数,指定pom.xml的位置: ...
-
JPA监听器
背景 在JPA中,我们使用Java Persistence API进行数据的持久化(增删改查),相应的该API也提供了监听数据持久化生命周期中的回调方法,比如我们通过JPA的审计功能可以插入创建者(@CreatedBy)、修改者(@LastModifiedBy)、创建时间(@CreatedD...
-
动态修改SpringBoot应用的日志级别
背景 线上环境的代码日志输出级别通常都是 INFO (SpringBoot的默认日志级别就是INFO),在这个日志级别下只会打印一些非常重要的信息。 但是一旦线上代码出现了Bug,就需要输出在代码中预置好的更详细的日志(使用 logger.debug() 或 logger.trace()...
-
Java Bean Validation入门介绍
概述 “数据校验”是比较常见的工作,在日常的开发中贯穿于代码的各个层次,从上层的View层到底层的数据层,为了保证程序的正确运行以及数据的正确性,开发者通常会在不同层次间做数据校验,而且这些校验工作通常都是重复的,为了实现代码的复用性,通常会把校验的逻辑写在被校验的对象上。 Bean ...
-
使用dom4j解析XML
最近在工作中需要解析BPMN2.0的XML文件,需要用到XML解析的类库。在Java的生态中通常解析XML可以使用dom4j,jdom,SAX,JAXB等方式,看到一些文章说dom4j的效率要高一些而且它还支持 XPath,所以最终选择了使用dom4j。 步骤 导入依赖 ...