从零开始Spring Boot 1:快速构建

从零开始Spring Boot 1:快速构建

img

图源:简书 (jianshu.com)

最近因为工作关系,开始学习Spring Boot,作为一个Java开发新手,不可避免地在上手第一个Java框架后遇到各种迷茫和波折,所以在学习的同时开一个新系列,记录一些学习的积累和感悟。

Spring Boot是什么

简单的说,Spring Boot是脱胎于Spring家族的一个框架,它诞生的原因在于Spring MVC等Spring系列框架虽然商用的可用性已经很强,相关组件和配置都很完善,但配置工作太过繁琐复杂,以至于有人称之为“配置地狱”。

Spring Boot的目的就是让Spring实现一个配置简单、容易运行的Spring系列框架,它不需要任何复杂的XML配置文件,仅需要小部分配置就可以良好运行。

下面通过快速构建一个新的Spring Boot应用来体验一下。

在继续阅读之前,你需要确保:

  • 已掌握Java基础内容(Java SE)。
  • 已对Web开发有了基础认识。
  • 有过IDE操作经验(不限于Java相关IDE)。
  • 有MySQL操作相关基础,并了解SQL语言编写。

你不需要掌握:

  • J2EE相关内容(我也还没掌握)。
  • Spring系列框架知识(我同样没有任何概念)。
  • Intellij IDEA使用经验(我也是第一次上手这个IDE)。
  • 熟悉Java项目的构建工具,如Maven(同上)。

好了,Let’s go!

环境安装

Java运行环境

这个不需要多说,前往官网下载安装最新的JDK即可,相信掌握Java基础的开发者可以自行搞定。

Maven

Maven是一个Java项目构建工具,它也是Spring Boot项目必须的。官网:

  • Maven – Download Apache Maven

下载后为了方便使用,需要添加Maven的主目录到环境变量Path

从零开始Spring Boot 1:快速构建_第1张图片

  • 系统关键变量或用户环境变量都是可以的,我一般修改用户环境变量。
  • 有的文章会建议添加MAVEN_HOME这个环境变量,然后添加%MAVEN_HOME%\binPath,但似乎用处不大,直接添加路径到Path也是可以的。

添加好后可以通过命令行检查:

❯ mvn -v
Access is denied.
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: D:\software\Coding\apache_maven
Java version: 16.0.1, vendor: AdoptOpenJDK, runtime: D:\software\Coding\JDK
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

如果遇到问题,可以检查环境变量Path是否配置正确,如果还是有问题,可以阅读XXX不是内部或外部命令,也不是可运行的程序或批处理文件的解决 - 魔芋红茶’s blog (icexmoon.cn)。

Maven构建Java项目的时候,会自动下载所需的工具和组件到本地,因此本地需要指定一个"Maven仓库"路径。默认的仓库路径是C盘下,为了节省C盘,推荐使用类似"Maven主目录/repo"这样的路径。

要修改仓库路径,可以修改"Maven主目录/conf/settings.xml"文件:

...
<localRepository>D:\workspace\maven_repolocalRepository>
...

此外,Maven的服务器国内访问速度很慢,这会导致新项目构建时间过长,因此推荐使用国内的镜像站。方式同样是修改配置文件:

...
<mirrors>
    ...
	<mirror>
      <id>alimavenid>
      <name>aliyun mavenname>
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
      <mirrorOf>centralmirrorOf>        
    mirror>
    ...
  mirrors>
...

Intellij IDEA

进行J2EE开发,首推Intellij IDEA这个IDE,官网:

  • IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains

一开始我尝试使用VSC来构建Spring Boot项目,发现需要安装和配置很多插件才能完成热启动等功能,而且还不一定能顺利,所以直接选择安装Intellij IDEA。

IDEA是收费软件,不过有一个免费的社区版可以下载,但功能削减很多,建议直接安装正式版。

要省(bai)钱(piao),可以通过某宝购买激活码或者账户激活的方式,不过最新的2022版似乎是不支持激活码的,只能买50/年的帐号激活服务。

另外也可以通过一个小工具解锁(你懂的):

链接:https://pan.baidu.com/s/1TAXrvUSR5CpzfktUptmkkg
提取码:4pyp

这个小工具是我意外获得,虽然我自己使用没有任何问题,但不保证完全安全。

IDEA安装激活好后,需要经过一系列配置才能好用,具体可以阅读(2021 最新版)IntelliJ IDEA 下载安装及配置教程 - 云+社区 - 腾讯云 (tencent.com)。需要注意的是,最新的IDEA 2022.1版中,全局配置必须在关闭当前项目后的Customize>All settings中设置。

从零开始Spring Boot 1:快速构建_第2张图片

打开项目后修改settings中的设置只对当前项目有效,新建一个项目就无效了。

配置中比较重要的是Maven的相关设置,需要设置好其主目录和配置文件路径。

好了,相关开发环境已经准备好了,下面开始第一个Spring Boot项目的构建。

更多Spring Boot开发所需的环境,可以阅读Getting Started (spring.io)。

生成框架代码

这里第一步是生成项目的框架代码,可以通过多种方式,这里通过最简单的方式:从Spring Boot官网获取:

  • Spring Initializr

上面这个网站支持通过页面配置的方式生成相应的Spring Boot初始框架代码:

从零开始Spring Boot 1:快速构建_第3张图片

红框标记的这些比较重要,可以设置构建工具、Spring Boot版本等。

需要注意的是:

  • Spring Boot的版本需要选择不带括号的正式版(snapshot为预览版)。
  • 打包方式(Packaging)选择Jar,因为后续要通过Jar包启动应用。
  • 右侧的依赖(Dependences)选择Spring Web,它会方便地为我们配置Web开发所需的依赖项。

一切选好后点击下方的GENERATE按钮,然后会下载一个xxx.zip压缩文件,解压后就是你的初始项目代码。

first app

通过IDEA的open菜单打开项目目录并加载项目。

从零开始Spring Boot 1:快速构建_第4张图片

src/main/java中存放的是项目的Java代码,相应的.../resources存放配置等静态资源。

我们项目包名下存在一个MyFirstAppApplication类,这是整个应用的入口类:

package cn.icexmoon.my_first_app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyFirstAppApplication {

	public static void main(String[] args) {
		SpringApplication.run(MyFirstAppApplication.class, args);
	}

}

Java框架的大多数功能都是通过注解来实现的,这里的@SpringBootApplication注解标识了入口类,通过这个注解,Spring Boot可以自动检索入口类所在的当前目录以及子目录的类文件,并处理@Companent@Service等其他Spring系列框架的注解。该注解还可以设置Spring Boot的相关默认配置。

  • 想了解Java注解相关内容可以阅读Java编程笔记20:注解 - 魔芋红茶’s blog (icexmoon.cn)。
  • 关于@SpringBootApplication注解的更多解释,可以阅读Developing with Spring Boot。

和其它Java应用相同,Spring Boot使用入口类的main方法作为入口方法,并且通过SpringApplication.run方法加载整个应用。

因为我们生成框架代码时选择的是“Spring Web”,所以启动这个应用也意味着应用包含的“Nginx”被启动,我们就可以拥有一个简单的“Web应用”。

为了让这个应用更有趣一些,我们可以给这个应用添加一个“请求处理器”:

package cn.icexmoon.my_first_app.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(@RequestParam(value="name",defaultValue="noname") String name){
        return String.format("Hello %s", name);
    }
}

这里是一个简单的处理/hello的请求的处理器。@RestController注解表明这个类是一个“Restfull 风格处理器”,换言之,其返回的内容是纯文本(通常是JSON格式),而非是一个HTML页面(需要其它组件进行处理,如模版引擎)。

@GetMapping表示这个方法用于处理指定的Get请求。需要处理的url路径直接通过其value值的方式指定。

需要注意的是,这里@GetMapping("/hello")可以同时处理xxx/helloxxx/hello/两种请求,而@GetMapping("/hello/")将只能处理xxx/hello/这种请求。这点和大多数语言Web框架的处理器路由逻辑是相同的。

可以通过@RequestParam注解将方法的参数“绑定”为请求的url参数,参数名可以由注解的namevalue属性指定,并且可以用defaultValue属性指定一个默认值。

hello方法的内容很简单,直接返回格式化字符串。

现在可以通过右上角的rundebug按钮启动应用:

从零开始Spring Boot 1:快速构建_第5张图片

下方的debug窗口会显示输出信息:

从零开始Spring Boot 1:快速构建_第6张图片

如果看到Completed initialization就表明启动成功。

Spring Boot默认使用8080端口,所以我们可以用浏览器访问http://localhost:8080/hello/,就能看到类似Hello noname这样的输出。也可以带上参数:http://localhost:8080/hello?name=icexmoon。可以看到Hello icexmoon

Auto restart

在开发Web应用的时候,我们通常希望修改完代码后立即看到效果,而Java是一种编译型语言,修改完代码后需要经过 **“编译>Maven重新加载项目>重新启动Nginx” **这一系列动作。如果每次都需要开发者依次手动执行,将会非常麻烦。

相应的,自动帮我们执行相应的工作的技术也是有的,通常被称作“热启动”(auto restart)。

要让Spring Boot项目具备热启动,需要在Maven的配置pom.xml中添加如下依赖:

<dependencies>
		...
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-devtoolsartifactId>
			<scope>runtimescope>
			<optional>trueoptional>
		dependency>
	dependencies>

这里的spring-boot-devtoolsSpring Boot提供的一系列开发者工具,其中就包含对热启动的支持,并且这种方式实现的热启动,仅会在开发环境生效,不会影响生产环境。

除了加入devtools依赖,还需要让IDE的自动构建项目等选项生效:

从零开始Spring Boot 1:快速构建_第7张图片

这些都设置好之后,在修改完代码后点击build按钮就可以完成热启动:

从零开始Spring Boot 1:快速构建_第8张图片

需要注意的是,只有通过debug方式启动的项目才会热启动,通过run启动是不行的。

Jar包

因为我们项目是用Maven构建的,所以可以用Maven来生成Jar包:

mvn package

在系统的命令行工具执行或者IDE中的命令行工具执行都是可以的,这里我直接在IDEA中执行:

从零开始Spring Boot 1:快速构建_第9张图片

执行成功后可以在target目录中看到构建好的jar包:

从零开始Spring Boot 1:快速构建_第10张图片

项目所有的源码和引用的库文件以及内嵌的Nginx都会被包含在这一个jar包中,我们可以直接以运行这个jar包的方式启动应用:

java -jar .\my_first_app-0.0.1-SNAPSHOT.jar

一开始我是使用IDEA的工具生成Jar包的,但是遇到一些问题,详情请见IDEA生成spring boot项目jar包 - 魔芋红茶’s blog (icexmoon.cn)。

好了,关于Spring Boot的快速构建相关内容就到这里了,谢谢阅读。

参考资料

  • Spring Boot Reference Documentation

你可能感兴趣的:(JAVA,spring,boot,java,spring)