
java
文章平均质量分 71
以解决问题为导向,逐步深入java开发的各个环节
照物华
一切过往,皆为序章
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
揭秘 Spring Boot 配置的奥秘:从文件查找、加载到属性注入的深度实践
Spring Boot配置管理深度解析:本文系统介绍了Spring Boot配置管理的核心机制,包括配置文件的查找优先级(目录优先级和格式优先级)、多环境配置策略(profile激活与组合)、灵活加载方式(自定义路径、追加配置和2.4+版本引入的config.import功能)。重点讲解了属性注入的两种方式:传统的@Value注解和类型安全的@ConfigurationProperties绑定,并特别说明了如何突破@PropertySource对YAML文件的限制。原创 2023-08-05 16:51:06 · 793 阅读 · 0 评论 -
SLF4J 日志新风尚:Fluent API vs. 传统 API,谁是你的菜?
SLF4J 2.x 引入的 Fluent Logging API 与传统日志记录方式形成对比。传统 API 简洁高效,适用于简单文本日志,通过{}占位符实现延迟格式化。而 Fluent API 采用链式调用,支持结构化日志(JSON格式)、真正的懒加载(避免不必要计算)和动态日志构建,更适合现代日志分析系统.原创 2025-07-19 20:54:39 · 1234 阅读 · 0 评论 -
Logback 配置的利器:深入理解<property>与<variable>
Logback 的 <property> 定义静态值,可从 XML 或外部文件加载,提升配置复用与可读性。<variable> 更动态,通过 scope 从系统属性或环境变量取值,适应多环境与云原生部署。解析属性时遵循优先级:本地/上下文 > 系统属性 > 环境变量。理解并结合使用两者,能构建灵活且适应性强的 Logback 配置。原创 2025-07-19 00:00:15 · 783 阅读 · 0 评论 -
揭秘 Spring Boot 日志:Logback 配置文件加载顺序的奥秘
这篇博客深入探讨了 Spring Boot 中 Logback 日志配置文件的加载机制。文章详细解析了 AbstractLoggingSystem 的源码,揭示了配置文件(包括 logback.xml 和 logback-spring.xml)是如何被发现和加载的。文中明确了优先级规则:JVM 系统属性最高,其次是 logging.config 属性,然后是支持 Spring Profile 的 logback-spring.xml(优先级高于标准 logback.xml),最后是 Logback 的默认配原创 2025-07-18 03:12:06 · 738 阅读 · 0 评论 -
Spring Boot 应用优雅停机与资源清理:深入理解关闭钩子
本文探讨了Spring Boot应用实现优雅停机(Graceful Shutdown)的关键机制。重点解析了spring.main.register-shutdown-hook配置项(默认为true)的作用,它决定了Spring Boot是否向JVM注册关闭钩子,确保在收到正常终止信号时能执行清理操作。文章详细介绍了两种实现自定义清理逻辑的方式:监听ContextClosedEvent事件(适用于全局清理)和使用@PreDestroy注解(适用于Bean级清理)。原创 2025-07-18 09:00:00 · 1157 阅读 · 0 评论 -
java中通过注解实现自定义验证器
本文介绍了如何创建并使用自定义验证注解来校验"YYYY-MM"格式的数据。首先定义了一个@ValidYearMonth注解,指定了验证规则和错误提示信息。然后实现了YearMonthValidator验证器类,通过正则表达式"\d{4}-\d{2}"确保字符串符合年月格式。最后展示了如何在实体类字段上使用该注解进行校验。这种自定义验证方式可以灵活应用于各种格式校验需求,确保数据在持久化前符合业务规则。原创 2024-03-04 18:11:32 · 580 阅读 · 1 评论 -
JPA在查询时自动过滤已删除的数据
在使用 JPA 时,若需在每次查询时自动过滤掉软删除(`deleted` 标记为 `true`)的数据原创 2024-03-04 15:22:52 · 904 阅读 · 0 评论 -
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 与软删除逻辑的冲突及解决
本文探讨了JPA中CascadeType.REMOVE和orphanRemoval=true与软删除策略的冲突。两者都会导致物理删除操作,与软删除保留数据的初衷相违背。建议避免使用这两个设置,转而采用业务逻辑手动处理软删除传播或实现自定义删除逻辑。在设计数据模型时需综合考虑实体关系与删除策略的兼容性,以维护数据完整性。最终结论指出这些JPA特性通常不适用于软删除场景,开发者应根据需求选择合适策略。原创 2024-03-04 12:53:53 · 648 阅读 · 0 评论 -
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 的区别
关于JPA中CascadeType.REMOVE 和 orphanRemoval = true 的区别原创 2024-03-04 12:42:57 · 840 阅读 · 0 评论 -
@SpringbootApplication详解和自定义类型过滤器
Spring的强大之处不仅仅是提供了IOC容器,能够通过过滤规则指定排除和只包含哪些组件,它还能够通过自定义TypeFilter来指定过滤规则。如果Spring内置的过滤规则不能够满足我们的需求,那么我们便可以通过自定义TypeFilter来实现我们自己的过滤规则。在使用@ComponentScan注解实现包扫描时,我们可以使用@Filter指定过滤规则,在@Filter中,通过type来指定过滤的类型。/**原创 2023-08-05 11:01:14 · 858 阅读 · 0 评论 -
Spring boot 注册过滤器的方式
注解来配置优先级,缺点是无法指定拦截的路径(默认拦截所有)此种方式的问题在于无法指定 Filter 的优先级。使用配置的方式可以完美解决前两种方式遇到的问题。原创 2023-04-10 15:33:54 · 329 阅读 · 1 评论 -
maven的pom.xml详解
maven的pom.xml文件配置属性详解,maven可继承的pom属性原创 2022-07-03 10:30:42 · 541 阅读 · 0 评论 -
SpringBoot使用Swagger3出现Unable to infer base url.This is common when using dynamic servlet
在使用`SpringBoot`中配置`Swagger3`的时候,出现Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is av原创 2022-04-13 23:56:12 · 7722 阅读 · 6 评论 -
Spring框架核心之AOP
面向切面编程,又叫AOP,就是将交叉业务逻辑封装成切面,利用AOP的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。若不使用AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。这样,会使主业务逻辑变的混杂不清。术语说明切面切面泛指交叉业务逻辑。比如事务处理、日志处理就可以理解为切面。常用的切面有通知与顾问。实际就是对主业务逻辑的一种增强织入织入是指将切面代码插入到目标对象的过程。连接点连接点指切原创 2022-04-06 17:52:58 · 656 阅读 · 0 评论 -
java线程的基本操作及原理
java多线程的基本操作及原理原创 2022-04-04 23:52:33 · 361 阅读 · 0 评论 -
Maven的settings.xml文件结构之Servers,Mirror和Repository
一个Setting.xml模板解析在maven的配置文件settings.xml中,有Servers节点,Mirror节点和Repository节点,一个典型的settings.xml配置如下转载 2022-03-16 01:40:34 · 1901 阅读 · 0 评论 -
Spring框架核心之AOP前置知识
前置知识之代理模式代理模式就是为其他对象提供一个代理对象,以控制或者增强目标对象准备创建 maven 工程,pom.xml如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio原创 2021-09-24 11:57:10 · 174 阅读 · 0 评论 -
Spring框架之注解编程
本文主要介绍spring5注解编程中使用到的 xml 配置和java配置的方式,@Autowired和@Resource 的区别原创 2021-09-03 17:17:07 · 538 阅读 · 0 评论 -
Spring框架之XML配置文件的使用
Spring基于XML配置文件方式的使用,maven结构,基于spring5.3,IOC : 控制反转 Inversion of Controller,IOC本质上是一个概念,是一种思想,控制反转就是对对象控制权的转移,SpringIOC容器创建对象,然后将对象的使用权交出去。原创 2021-09-03 17:05:18 · 445 阅读 · 0 评论 -
Spring中BeanFactory和ApplicationContext的区别
ApplicationContext 继承了 BeanFactory ,并扩展了很多新的功能,如事件广播、资源加载、web支持等。区别:BeanFactory在ioc容器初始化的时候,并不会实例化对象,当我们getBean的时候,才会实时实例化该bean对象。ApplicationContext在ioc容器初始化的时候,就实例化了所有的Bean。pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http原创 2021-09-03 00:19:09 · 162 阅读 · 0 评论 -
Class has been compiled by a more recent version of the Java Environment (class file version 53.0)
Class has been compiled by a more recent version of the Java Environment (class file version 53.0) , android sdk , java sdk , 版本原创 2020-11-29 23:30:57 · 366 阅读 · 0 评论 -
JAVA包装类和基础类型缓存池
Java整数缓存-为什么Integer.valueOf(127)== Integer.valueOf(127)为True《Java架构筑基》从Java基础讲起——基础类型缓存池概念如何调整缓存范围可以通过设置虚拟机参数:XX:AutoBoxCacheMax=<size>或 -Djava.lang.Integer.IntegerCache.high=<high> 来设置缓存范围的最大值(包含)。...原创 2020-11-26 22:25:36 · 164 阅读 · 1 评论 -
maven笔记
打包可运行的jar有时候,我们需要maven打包出可以直接运行的jar,可是默认生成的jar是不能直接运行的。因为带有main方法的类信息不会自动添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,无法看到Main-Class一行)。为了生成可执行的jar文件,需要借助maven-shade-plugin插件,该插件配置如下:<plugin>...原创 2020-04-26 17:35:14 · 301 阅读 · 0 评论 -
在deepin linux中安装jdk
下载jdk解压$ mv /opt$ mkdir java$ cd java$ mv ~/Downloads/jdk-8u144-linux-x64.tar.gz .$ tar -zxvf jdk-8u144-linux-x64.tar.gz$ mv jdk-8u144 jdk1.8设置环境变量sudo vi /etc/profile在最后加入如下内容#set ja...原创 2020-04-25 23:06:54 · 298 阅读 · 0 评论 -
kaptcha-2.3.2.jar包Maven下载失败解决方式
原文请看这里。<!-- 该配置已不能用<dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency&g...转载 2020-04-16 00:31:43 · 2052 阅读 · 2 评论 -
maven的坐标和依赖
来自《Maven实战》第五章Maven的一大功能是管理项目, 为了能自动化的解析任何一个java构件, Maven必须将它们唯一标识,这就是依赖管理的底层基础–坐标.坐标为构件引入秩序关于坐标最熟悉的应该是平面几何, 在平面几何坐标系中, 坐标(x,y)能够唯一标识平面中的一个点. 实际生活中, 地址也是一种坐标, 通过省市县区街道等一系列的信息,可以唯一标示城市中的任意地址, 邮局和快............原创 2020-04-12 21:16:19 · 939 阅读 · 3 评论 -
Summary of experience in using idea
设置自动优化导包项快捷键自动换行shift + enter: 行中任意位置直接换行。Ctrl + Shift + Enter:行中任意位置自动补全当前语句的分号,并将光标定位到行尾。这个快捷键本身的含义是自动完成,如果需要的话,会在行尾添加分号;将光标跳到当前行的上一行ctrl + alt + enter插件save actions保存时自动格式化,将没用的import 语...原创 2020-04-07 02:21:47 · 237 阅读 · 0 评论 -
java.lang.RuntimeException: java.net.BindException: 地址已在使用 (Bind failed)
问题在《Maven实战》这本书的里,有一个GreenMail邮件测试的示例代码,完整的代码见这里,在运行mvn clean test 的时候,一直出现如下的错误。Exception in thread "Thread-0" java.lang.RuntimeException: java.net.BindException: 地址已在使用 (Bind failed) at co...原创 2020-04-07 01:40:02 · 2082 阅读 · 0 评论 -
RTTI和反射
Class对象理解RTTI在java中的工作原理,首先必须知道类型信息在运行时是如何表示的。这项工作是由Class对象的特殊对象完成的,它包含了与类有关的信息。类是是程序的一部分,每个类都有一个Class对象。没当编写并编译了一个新类,就回产生一个Class对象(更恰当的说,是被保存在一个同名.class文件中)。为了生成这个类的对象,运行这个程序的Java虚拟机将使用被称为“类加载器”的子...原创 2020-04-05 20:22:59 · 191 阅读 · 0 评论 -
inner class in java
可以将一个类的定义放在另一个类的定义内部,这就是内部类。先准备两个接口,代码如下。接口Contentspackage com.cn.thk.innerClass;public interface Contents { Integer value();}接口Destinationpackage com.cn.thk.innerClass;public interface De...原创 2020-04-05 15:37:17 · 165 阅读 · 0 评论 -
Java 构造器内部的多态方法的行为
来自《java编程思想》第八章class Glyph { Glyph(){ System.out.println("Glyph() before draw()"); draw(); System.out.println("Glyph() after draw()"); } void draw() { System.out.println("Glyph.draw()");...转载 2020-03-31 14:40:28 · 167 阅读 · 0 评论 -
121212
基本类型java要确定每种基本类型所占存储空间的大小是不变的。基本类型所具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。基本类型大小包装类型boolean–Booleanchar16bitsCharacterbyte8bitsByteshort16bitsShortint32bitsInteger...原创 2020-03-30 01:42:11 · 339 阅读 · 0 评论 -
java编程思想=>对象的创建和生命周期
在使用对象时,最关键的问题之一便是它们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。当我们不需要一个对象时,它必须被清理掉,使其占有的资源可以被释放和重用。在相对简单的编程情况下,怎么清理对象看起来似乎不是什么挑战:你创建了对象,根据需要使用它,然后它应该被销毁。然而,你很可能会遇到相对复杂的情况。例如,假设你正在为某个机场设计空中交通管理系统(同样的模型在仓库货柜管理系统、...转载 2020-03-29 14:11:05 · 209 阅读 · 0 评论 -
为JDK13生成jre
在jdk目录下,输入一下命令,敲回车就可以了。bin\jlink --module-path jmods --add-modules java.desktop --output jrewindows 系统使用bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre...原创 2020-03-28 15:03:42 · 1150 阅读 · 0 评论 -
get请求和post请求的区别
1)从安全性看get<post,get提交的数据会在浏览器的地址栏里显示, 2)从提交内容大小来看,get<post,get提交的数据不能大于2K,而post提交的数据理论上不受限制,但在实际编程中建议不要大于64K 3)从响应速度看,get>post,get要求服务器立即处理请求,而post请求可能形成一个队列请求 ...2009-11-19 21:07:24 · 113 阅读 · 0 评论 -
实现servlet的三种方法
a)实现servlet接口 [code="java"]//这是我的第一个Servlet,使用servlet接口的方式来开发package com.tsinghua;import javax.servlet.*;import javax.servlet.ServletConfig;import javax.servlet.ServletException;imp...2009-11-19 20:20:17 · 155 阅读 · 0 评论 -
java中的内部类<二>
如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的方式来明确指定我们真正要访问的变量。[code="java"]package com.cn.test;public class Outer2 { private int i; public class Inner{ private int i;...2009-11-15 21:35:29 · 114 阅读 · 0 评论 -
java中的内部类<一>
(1)内部类可以直接访问外部类的成员,包括private成员,但是,内部类的成员不能被外部类直接访问。 (2)内部类对象保存了一个对外部类对象的引用,当内部类的成员方法访问某一个变量时,如果该方法的内部和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个高峰外部类对象的引用。[code="java"]package com.cn.test;publ...2009-11-15 20:59:59 · 115 阅读 · 0 评论 -
在JAVA中如何取得一个变量的类型
今天在看《java核心》的时候,忽然想到一个问题,就是在java中怎么才能知道一个变量的类型呢,看了一下API没有找到直接解决的办法,反射好像可以解决,我不太熟悉,好像比较麻烦一些,就自己试着写了一下,呵呵,一个小方法解决了,放在这里根大家共享一下[code="java"]package com.cn.test;public class Demo { /**...2009-11-07 22:27:39 · 839 阅读 · 0 评论