Spring Boot 集成 H2 数据库

配置文件 本文介绍 Spring Boot 集成 H2 数据库基础配置。 application-h2.yml 1 2 3 4 5 6 7 8 9 10 11 spring:datasource:url:jdbc:h2:mem:testusername:sapassword:sadriver-class-name:org.h2.Driverschema:classpath:db/schema.sql# 表结构data:classpath:db/data.sql# 预先准备数据h2:console:enabled:true 数据表 项目路径:resources/db 表结构:schema.sql 1 2 3 4 5 6 7 8 9 10 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); data.

Nexus 部署

本文介绍使用 Nexus 部署,完成 Maven 私有仓库的搭建。 Nexus Docker 镜像:https://hub.docker.com/r/sonatype/nexus3 默认方式启动 Nexus Nexus 使用 Docker 方式部署灰常简单,一行命令即可。 1 docker run -d -p 8081:8081 --name nexus sonatype/nexus3 持久化数据 默认方式启动,数据在容器中,容器删除,数据也就没有了,我们需要将数据持久化。 这里挂载到宿主机 /data/nexus-data下, 注意目录权限。 1 2 3 cd /data mkdir nexus-data chown 200 nexus-data 1 docker run -d -p 8081:8081 --name nexus -v /data/nexus-data:/nexus-data sonatype/nexus3 Nexus 用户角色查看 1 2 3 4 5 [root@mangobeta.

理解 Kafka

本文记录笔者在学习 Kafka 过程中,对 Kafka 概念理解和问题整理。 假设我们需要一个任务队列,用于处理异步任务,它大概长这样。 典型的先进先出(FIFO)队列,一个生产者,一个消费者,数据消费完即移除队列。 理想情况下,生产和消费能力相当,这样一个队列就满足需求了。但是现实往往不那么理想。 这样的设计有几个问题: 消费能力跟不上生产,队列会不会变得很庞大。 第一次消费失败,没有尝试机制。 单消费者。 数据持久性问题。 实际业务处理时,以上问题都需要解决,这里还没有考虑到分布式,数据副本等情形。 基于以上的思考,我们看下 Kafka 怎么解决了这些问题。 Kafka 架构图: 如图所示,Kafka 支持多生产者,多Topic(主题,相当于一个独立队列),多消费者。 一些基本概念: Producer 即生产者 Topic 主题,可以理解为消息队列 Partition 为 Topic 的分区,Kafka 消息的存储是按 Partion 为单位的。一个 Topic 可以指定一个或多个分区,当指定一个时就变成我们最上面设想的队列。 Broker 代理,消费者所消费的实例。 Kafka 数据时序性问题 Kafka Topic 数据存储时会(平均)存储在 Partition上。如图所示:

Docker 入门指北

Docker 是什么? Docker是个管理容器(Container)的服务,提供「应用层级」的虚拟化技术。 不同于传统虚拟机,Docker 依靠 Linux 上的命名空间(Namespaces)、控制组(Control groups)、Union 文件系统(Union file systems)和容器格式(Container format)等技术,来达到应用资源限制与封装隔离。 传统虚拟机和 Docker 对比: 虚拟机运行在虚拟硬件上,应用运行在虚拟机内核上。而 Dockerd 是宿主机上的一个进程, 应用只是 Dockerd 的一个子进程, 换句话说,应用直接运行在宿主机内核上。 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上。Docker 没有硬件虚拟化, 因而可以运行在物理机、虚拟机, 甚至 Docker 容器内(嵌套运行)。 因为没有硬件虚拟化及多运行一个 Linux 内核的开销,应用运行在 Docker 上比虚拟机上更轻、更快。 笔者注:传统虚拟机和 Docker 是不同级别的虚拟化。虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。具体怎么用还要根据实际应用场景来。 Docker 基本概念 镜像(Image) 镜像描述了 Docker 容器运行的初始文件系统,,包含运行应用所需的所有依赖。即可以是一个完整的操作系统。 也可以仅包含应用所需的最小 bin/lib 文件集合。

Gradle 构建跳过测试

1. 介绍 尽管跳过测试通常不是一个好主意,但在某些情况下它可能有用,并且可以为我们节省一些时间。 例如,考虑我们正在开发一个新功能,并且希望在中间版本中看到结果。 在这种情况下,我们可能会暂时跳过测试以减少编译和运行它们的开销。 毫无疑问,忽略测试会导致许多严重的问题。 在这个简短的教程中,我们将了解如何在使用Gradle构建工具时跳过测试。 2. 使用命令行标志 首先,让我们创建一个我们想跳过的简单测试: 1 2 3 4 @Test void skippableTest() { Assertions.assertTrue(true); } 当我们运行构建命令: 1 gradle build 我们将会看到运行的任务: > ... > Task :compileTestJava > Task :processTestResources NO-SOURCE > Task :testClasses > Task :test > .