SpringBoot快速入门笔记

咨询了老哥,做一个系统用哪些东西比较好,给我推荐了Spring Boot。说真的,以前知道有Spring、SpringMVC,虽然还有一大堆东西,但是对Spring Boot还是略为陌生。所以,去搜了搜它的主要功能。总结网上所说,即最大的功能就是简化Spring应用的配置,让上手更容易。使用Mave

咨询了老哥,做一个系统用哪些东西比较好,给我推荐了Spring Boot。说真的,以前知道有SpringSpringMVC,虽然还有一大堆东西,但是对Spring Boot还是略为陌生。所以,去搜了搜它的主要功能。总结网上所说,即最大的功能就是简化Spring应用的配置,让上手更容易。

使用Maven构建项目

使用http://start.spring.io/里面的SPRING INITIALIZR生成Maven项目。选择生成项目,会下载项目压缩包到本地。然后解压之。如下图:

这里写图片描述

接下来比较关键吧,导了好几次,才导成功。感觉参考的教程上写得流程与当前最新版本的IDEA不太相符,在这里补充完整,给自己做个笔记。

1)先打开IntelliJ IDEA的欢迎界面,选择Import Project

这里写图片描述

2)找到解压的目录,点击Open

这里写图片描述

3)选择以Maven模板打开,后续根据需要一路选择Next即可。

这里写图片描述

4)导入成功后如下所示:

这里写图片描述

通过上面步骤完成了基础项目的创建,如上图所示,Spring Boot的基础结构共三个文件(具体路径根据用户生成项目时填写的Group所有差异)。HelloController.java请忽略,这是我后面添加的: src/main/java下的程序入口:DdggApplicationsrc/main/resources下的配置文件:application.propertiessrc/test/下的测试入口:DdggApplicationTests生成的DdggApplicationDdggApplicationTests类都可以直接运行来启动当前创建的项目,由于目前该项目未配合任何数据访问或Web模块,程序会在加载完Spring之后结束运行

引入Web模块

当前的pom.xml内容如下,仅引入了两个模块,还不能跑Web应用:

这里写图片描述

spring-boot-starter:核心模块,包括自动配置支持、日志和YAML spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito

要跑Web应用需要引入spring-boot-starter-web

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

HelloWorld

src/main/java下创建HelloController.java

package cn.asahi.ddgg;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String index(){
        return "Hello world";
    }
}

启动程序,打开浏览器访问http://localhost:8080/hello

编写测试用例

修改src/test/下的DdggApplicationTests,最后如下所示:

package cn.asahi.ddgg;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DdggApplicationTests {

	private MockMvc mvc;

	@Before
	public void setUp() throws Exception {
		mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
	}

	@Test
	public void contextLoads() throws Exception {
		mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
				.andExpect(status().isOk())
				.andExpect(content().string(equalTo("Hello Xorld")));
	}
}

@Test所注解的方法中,它模拟请求了前面的/hello页面的内容,并对其的内容与Hello Xorld做对比。但是它与/hello的内容不同。在该类中,点击右键:

这里写图片描述

选择运行该测试类,结果如下:

这里写图片描述

修改之成为Hello world,即设置期望的返回值为它,再与/hello的返回值做比较,期望与实际的一致,则运行正常,无错误提示。

测试的一种方式吧,对某个URL的内容,与所期望的内容做对比,这样就不需要在浏览器中打开,也不需要肉眼对比期望与实际的差别。

参考:http://blog.didispace.com/spring-boot-learning-1/

Read more

Volcano 与 Kubernetes GPU 调度学习笔记

本笔记系统整理 Volcano 调度器、Kubernetes 调度框架、GPU Device Plugin、HAMi 等云原生 AI 调度领域的核心知识,适合用于学习、复习和工程实践参考。 目录 * 第一部分:Volcano 入门 * 1. Volcano 是什么 * 2. 安装与快速使用 * 3. 核心特性一览 * 第二部分:Volcano 整体架构 * 4. Volcano 解决的核心问题 * 5. 整体架构与数据流 * 6. 三层抽象模型 * 第三部分:Volcano 核心实现原理 * 7. Session 机制 * 8. Gang Scheduling 实现 * 9. Queue 与 DRF 公平调度

容器镜像(4):镜像的常用工具箱

容器镜像(4):镜像的常用工具箱

前几篇在讲多架构镜像时已经用过 skopeo 和 crane 做镜像复制,这篇系统整理这两个工具的完整能力,同时介绍几个日常操作镜像时同样好用的工具。 一、skopeo:不依赖 Daemon 的镜像瑞士军刀 skopeo 的核心价值是绕过 Docker daemon,直接与 Registry API 交互。上一篇用它做镜像复制和离线传输,但它的能力远不止于此。 1.1 安装 # Ubuntu / Debian sudo apt install -y skopeo skopeo --version # skopeo version 1.15.1 1.2 inspect:免拉取检查镜像元数据 docker inspect 需要先把镜像拉到本地,skopeo inspect 直接向 Registry

容器镜像(3):多架构镜像构建

容器镜像(3):多架构镜像构建

一、什么是多架构镜像 1.1 OCI Image Index 上一篇介绍了单平台镜像的结构:一个 Manifest 指向 Config 和若干 Layer blob。多架构镜像在此之上多了一层——OCI Image Index(也叫 Manifest List),是一个轻量的索引文件,把多个单平台 Manifest 组织在一起: $ docker manifest inspect golang:1.22-alpine { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests&

容器镜像(2):containerd 视角下的镜像

容器镜像(2):containerd 视角下的镜像

一、为什么需要了解 containerd 如果你只用 docker run 跑容器,从来不关心底层,那可以不了解 containerd。但如果你在用 Kubernetes,或者想真正理解"容器运行时"是什么,containerd 是绕不开的。 事实上,当你执行 docker run 的时候,containerd 早就在后台悄悄工作了——Docker 从 1.11 版本开始,就把核心运行时剥离出来交给 containerd 负责。 1.1 Docker 的架构演变 早期的 Docker(1.10 及之前)是一个"大一统"的单体程序:一个 dockerd