Java并发核心机制
Java 并发核心机制 Java 对于并发的支持主要汇聚在 java.util.concurrent,即 J.U.C。而 J.U.C 的核心是 AQS。 J.U.C 简介Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。从功能上,大致可以分为: 原子类 - 如:AtomicInteger、AtomicIntegerArray、AtomicReference、AtomicStampedReference 等。 锁 - 如:ReentrantLock、ReentrantReadWriteLock 等。 并发容器 - 如:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet 等。 阻塞队列 - 如:ArrayBlockingQueue、LinkedBlockingQueue 等。 非阻塞队列 - 如: ConcurrentLinkedQueue 、LinkedTransferQueue...
Mybatis原理
Mybatis 原理 Mybatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 Mybatis 完整示例为切入点,结合 Mybatis 底层源码分析,图文并茂的讲解 Mybatis 的核心工作机制。 Mybatis 生命周期 SqlSessionFactoryBuilderSqlSessionFactoryBuilder 的职责SqlSessionFactoryBuilder 负责创建 SqlSessionFactory 实例。SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。 Configuration 类包含了对一个 SqlSessionFactory 实例你可能关心的所有内容。 SqlSessionFactoryBuilder 应用了建造者设计模式,它有五个 build 方法,允许你通过不同的资源创建 SqlSessionFactory 实例。 12345SqlSessionFa...
Mybatis快速入门
MyBatis 快速入门 MyBatis 的前身就是 iBatis ,是一个作用在数据持久层的对象关系映射(Object Relational Mapping,简称 ORM)框架。 什么是 MyBatisMyBatis 是一款持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 快速入门 这里,我将以一个入门级的示例来演示 Mybatis 是如何工作的。 注:本文后面章节中的原理、源码部分也将基于这个示例来进行讲解。 数据库准备在本示例中,需要针对一张用户表进行 CRUD 操作。其数据模型如下: 12345678910111213CREATE TABLE IF NOT EXISTS user ( id BIGINT(10) UNSIGNED NOT NULL AUTO_INCREMENT CO...
Java并发简介
并发概念进程和线程 进程: 可以视为程序的一个实例。 线程: 线程作为最小调度单位,进程作为资源分配的最小单位。 一个进程之内可以分为一到多个线程。 一个线是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行 Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器。 进程和线程的差异: 一个程序至少有一个进程,一个进程至少有一个线程。 线程比进程划分更细,所以执行开销更小,并发性更高 进程是一个实体,拥有独立的资源;而同一个进程中的资源是多个线程共享的。 并行与并发单核 cpu 下,线程实际还是串行执行的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结为一句话就是: 微观串行,宏观并行 ,一般会将这种 线程轮流使用 CPU 的做法称为并发, concurrent cpu 时间片1 时间片2 时间片3 时间片4 co...
Spring 之 JPA
Spring 之 JPAJPA 为对象关系映射提供了一种基于 POJO 的持久化模型。 简化数据持久化代码的开发 为 Java 社区屏蔽不同持久化 API 的差异 Repository 是数据访问的抽象接口,JPA 是这种抽象的具体实现标准 快速入门(1)在 pom.xml 中引入依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency> (2)设置启动注解 123456789101112// 【可选】指定扫描的 Entity 目录,如果不指定,会扫描全部目录@EntityScan("io.github.dunwu.springboot.data.jpa")// 【可选】指定扫描的 Repository 目录,如果不指定,会扫描全部目录@EnableJpaReposit...
Spring 之事务
理解事务在软件开发领域,全有或全无的操作被称为事务(transaction)。事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。传统上 Java EE 开发对事务管理有两种选择:全局事务或本地事务,两者都有很大的局限性。 事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID。 快速入门创建 Service 接口实现类 TransactionServiceA 类,在 methodA() 方法中先往 tablea 表格插入一条数据,随后会调用 TransactionServiceB 服务的 methodB() 方法往 tableb 表格中插入一条数据。 123456789101112131415@Servicepublic class TransactionServiceA { @Autowired private TableService tableService; @Autowired private TransactionServiceB transactionServiceB; pub...
SpringBoot 之 Profile
SpringBoot 之 Profile 一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理。Spring Boot 对此提供了简便的支持。 关键词: @Profile、spring.profiles.active 区分环境的配置properties 配置假设,一个应用的工作环境有:dev、test、prod 那么,我们可以添加 4 个配置文件: applcation.properties - 公共配置 application-dev.properties - 开发环境配置 application-test.properties - 测试环境配置 application-prod.properties - 生产环境配置 在 applcation.properties 文件中可以通过以下配置来激活 profile: 1spring.profiles.active = test yml 配置与 properties 文件类似,我们也可以添加 4 个配置文件: applcation.yml - 公共配置 application-dev.yml - 开发环境配置 ...
SpringBoot 之属性加载详解
加载 property 顺序Spring Boot 加载 property 顺序如下: Devtools 全局配置 (当 devtools 被激活 ~/.spring-boot-devtools.properties). 测试环境中的 @TestPropertySource 注解配置 测试环境中的属性 properties:@SpringBootTest 和 测试注解. 命令行参数 SPRING_APPLICATION_JSON 属性 ServletConfig 初始化参数 ServletContext 初始化参数 JNDI attributes from 通过 java:comp/env 配置的 JNDI 属性 Java 系统属性 (System.getProperties()) 操作系统环境比那里 RandomValuePropertySource 加载 random.* 形式的属性 jar 包外的 application-{profile}.properties 或 application-{profile}.yml 配置 jar ...
SpringBoot 之快速入门
Spring Boot 简介Spring Boot 可以让使用者非常方便的创建 Spring 应用。 Spring Boot 的目标是: 为所有 Spring 开发者提供更快且可广泛访问的入门体验。 开箱即用 提供一系列通用的非功能特性(例如嵌入式服务、安全、指标、健康检查和外部化配置) 完全不需要代码生成,也不需要 XML 配置。 Spring Boot 系统要求Spring Boot 的构建工具要求: Build Tool Version Maven 3.5+ Gradle 6.8.x, 6.9.x, and 7.x Spring Boot 支持的 Servlet 容器: Name Servlet Version Tomcat 9.0 4.0 Jetty 9.4 3.1 Jetty 10.0 4.0 Undertow 2.0 4.0 部署第一个 Spring Boot 项目 本节介绍如何开发一个小的“Hello World!” web 应用示例,来展示 Spring Boot 的一些关键功能。我们使用 Maven 来构建这个...
Spring 校验
Spring 校验Java API 规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持spring mvc参数自动校验。 快速入门引入依赖如果 spring-boot 版本小于 2.3.x,spring-boot-starter-web 会自动传入 hibernate-validator 依赖。如果 spring-boot 版本大于 2.3.x,则需要手动引入依赖: 12345<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator-parent</artifactId> <version>6.2.5.Final</version>...







