Integer.valueOf()对比Integer.parseInt()
Java 中 Integer.valueOf() 和 Integer.parseInt() 的区别及实践在 Java 中,处理字符串与整数的转换时,Integer.valueOf() 和 Integer.parseInt() 是最常用的两个方法。
这两个方法虽然看似相似,但在实际使用中却有一些关键的区别。本文将详细讲解这两个方法的用法、内部实现及其不同之处,并结合实际示例来帮助大家更好地理解和使用。
方法定义和基本用法1. Integer.valueOf()方法定义:
12public static Integer valueOf(String s) throws NumberFormatException;public static Integer valueOf(int i);
用法:
Integer.valueOf(String s):将字符串 s 转换为 Integer 对象。
Integer.valueOf(int i):将基本数据类型 int 转换为 Integer 对象。
示例:
12Integer num1 = Integer.valueOf("123 ...
ES 文档基本操作
ES 文档基本操作添加文档模版:
12345678910POST /索引库名/_doc/文档id{ "字段1": "值1", "字段2": "值2", "字段3": { "子属性1": "值3", "子属性1": "值4" } // ......}
如果没有文档id,ES会随机生成一个
示例:
123456789POST /demo_index/_doc/1{ "demo_property_1":"test_content1_text", "demo_property_2":"test_content1_keyword", "demo_property_3":{ "demo_child_property ...
JsonNode API文档
JsonNode API 文档概述JsonNode 是 Jackson 数据绑定库中的一个类,用于表示 JSON 数据的节点。它是 com.fasterxml.jackson.databind.JsonNode 包的一部分,提供了处理 JSON 数据的灵活接口。
主要特性
支持多种类型的 JSON 数据(对象、数组、字符串、数字、布尔值和 null)。
支持树状结构的动态访问和遍历。
提供类型安全的方法访问 JSON 数据。
创建 JsonNode从 JSON 字符串创建1JsonNode jsonNode = objectMapper.readTree("{\"key\":\"value\"}");
从 Java 对象创建1JsonNode jsonNode = objectMapper.valueToTree(yourObject);
主要方法节点类型判断
boolean isObject()检查当前节点是否为 JSON 对象。
boolean isArray()检查当前节点是否为 JSON 数 ...
JsonNode详解
JsonNode 详解com.fasterxml.jackson.databind.JsonNode.JsonNode 是 Jackson 库中表示 JSON 数据结构的核心类之一,属于 com.fasterxml.jackson.databind 包。
它用于以树状结构解析和处理 JSON 数据。
JsonNode 的基本特性
树状结构:JsonNode 可以表示 JSON 的各种类型,包括对象、数组、字符串、数字、布尔值和 null。
动态访问:支持动态访问 JSON 节点的属性和元素,可以方便地进行遍历和操作。
类型安全:虽然 JsonNode 是一个通用类型,但它提供了一些方法以确保对 JSON 数据的类型安全访问。
创建 JsonNodeJsonNode 主要通过 ObjectMapper 类创建。以下是一些常用的方法:
12345678910import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.JsonNode;ObjectMapper object ...
数据库表字符编码utf8和utf8mb4
数据库表编码:UTF-8 与 UTF8MB4 的区别及选择编码概述在数据库中,字符编码定义了如何存储和处理字符串数据。UTF-8 和 UTF8MB4 是 MySQL 中常用的字符编码,具有不同的特性和适用场景。
UTF-8
定义:UTF-8 是一种可变长度字符编码,使用 1 到 4 个字节表示一个字符。
范围:支持 Unicode 字符集的绝大多数字符,但不支持某些特殊字符(如某些表情符号)。
字节限制:在 MySQL 中,UTF-8 仅使用 1 到 3 个字节存储字符。
UTF8MB4
定义:UTF8MB4 是 UTF-8 的扩展,完整支持 Unicode,包括所有字符。
范围:除了基本的多语言字符外,还支持所有的 emoji 和其他非基本字符。
字节限制:使用 1 到 4 个字节表示一个字符。
主要区别
特性
UTF-8
UTF8MB4
最大字节数
3 字节
4 字节
支持的字符范围
不支持某些 emoji
支持所有 Unicode 字符
应用场景
多数语言文本
包含特殊符号、表情符号等的文本
实战中的选择在选择字符编码时,考虑以下因素:
数据类型和内容
...
Spring事务管理的原理
Spring事务管理的原理Spring 通过 AOP 实现声明式事务的机制是其事务管理的核心部分。
声明式事务和编程式事务的实现原理不同。
声明式事务的实现原理AOP(面向切面编程)
代理模式:Spring 使用 AOP 代理模式来实现声明式事务。具体而言,当你在服务方法上使用 @Transactional 注解时,Spring 会生成一个代理对象,该对象会拦截方法调用。
切面:切面是 AOP 的核心概念,包含了切点(定义在哪些方法上应用切面)和通知(在切点方法执行前、后或异常时执行的逻辑)。在事务管理中,切面会处理事务的开启、提交和回滚。
事务通知:当目标方法被调用时,代理会执行事务的前置逻辑(例如开启事务),然后调用目标方法。执行完毕后,代理会根据方法执行的结果(正常结束或抛出异常)决定是否提交或回滚事务。
具体流程
方法调用:
当调用标注了 @Transactional 的方法时,Spring 代理会拦截该调用。
事务开始:
代理会使用配置的事务管理器开始一个新事务。
执行目标方法:
代理调用实际的业务逻辑方法。
事务结束:
根据目标方法的执行结果(正 ...
未检查的异常
未检查的异常未检查的异常(Unchecked Exception)是指在编译时不需要强制捕获或声明的异常。
在 Java 中,未检查的异常是 RuntimeException 类及其子类的实例,以及 Error 类及其子类的实例。
未检查的异常通常表示程序中的逻辑错误或不应当发生的情况。
主要特点
不需要显式处理:编译器不会强制要求在代码中捕获或声明这些异常。开发者可以选择处理这些异常,也可以不处理。
程序逻辑错误:未检查的异常通常表示程序内部的逻辑错误,例如访问数组的非法索引、空指针引用等。它们通常表示错误的程序设计。
运行时异常:未检查的异常通常在程序运行时发生,而不是在编译时。例如:
NullPointerException
ArrayIndexOutOfBoundsException
ClassCastException
事务管理中的应用在 Spring 中,默认情况下,只有未检查的异常(如 RuntimeException)会导致事务回滚。这意味着:
如果方法执行中抛出未检查的异常,Spring 会自动回滚当前事务。
如果方法执行中抛出已检查的异常(如 IOEx ...
\@Value注解缺省值的细节
@Value缺省值的细节使用 @Value 注解时,缺省值的一些细节包括:
格式:在 .properties 文件中,缺省值不需要用单引号包裹;在 YAML 文件中,可以使用单引号。
占位符:可以使用 ${} 来引用其他属性。
默认值语法:可以通过 :${defaultValue} 指定缺省值,例如:${some.property:defaultValue}。
类型转换:Spring 会自动根据目标字段类型进行类型转换。
异常处理:如果没有找到值且没有提供缺省值,可能会抛出异常。
事务传播的概念
事务传播的概念概述
事务传播是指在执行数据库操作时,如何处理当前事务与外部事务之间的关系。
在多层架构或分布式系统中,事务传播机制可以确保数据的一致性和完整性。
Spring 框架提供了多种事务传播行为,帮助开发者灵活管理事务。
事务传播的意义
数据一致性:确保在不同的数据库操作中,数据的一致性得以保持,避免因事务未提交或回滚而导致的数据不一致。
灵活性:允许在不同的业务逻辑层次中定义事务的行为,以便在需要的情况下开启或使用现有的事务。
错误处理:在出现异常时,能够决定是回滚当前事务还是让外部事务负责,从而简化错误处理逻辑。
Spring 中的事务传播行为Spring 提供了七种事务传播行为,分别是:
REQUIRED(默认行为):
如果当前存在事务,则加入该事务;如果不存在事务,则新建一个事务。
适用于大多数场景。
REQUIRES_NEW:
总是新建一个事务,即使当前存在事务也会暂停当前事务。
适用于需要独立事务的场景,如日志记录或审计功能。
NESTED:
如果当前存在事务,则在该事务中嵌套一个事务;如果不存在事务,则新建一个事务。
适用于需要部分 ...
\@ConditionalOnProperty 详解
@ConditionalOnProperty 注解详解概述@ConditionalOnProperty 是 Spring Boot 提供的一个条件注解,用于根据特定的属性值来决定是否加载某个 Spring Bean。
它使得 Bean 的创建变得更加灵活,允许开发者根据配置的不同来控制 Bean 的注册。
作用
灵活配置:可以根据不同的环境或配置条件,选择性地启用或禁用某个 Bean。
提高模块化:使得应用程序能够更好地适应不同的需求,避免了在代码中硬编码条件逻辑。
使用方法基本用法使用 @ConditionalOnProperty 注解时,可以指定以下几个属性:
**value/name**:要检查的属性名(必须是一个属性)。
**havingValue**:当属性值匹配时,条件成立,默认为 true。
**matchIfMissing**:如果指定的属性不存在,是否匹配,默认为 false。
示例假设我们有一个服务类 MyService,我们希望根据配置文件中的属性 app.service.enabled 来决定是否注册该 Bean。
1. 配置文件
在 appli ...
