Spring Boot 入门
source link: https://iiong.com/getting-started-with-spring-boot/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Spring Boot 入门
0x0 前言
记得当初放弃 Java
主要原因是几个框架整合,花了大半天去编写配置文件,编写任务后运行依然有报错,甚是心累,故转前端开发了。最近周围很多 Java 朋友说微服务开发很爽,各种简单,自己本地体验下,的确很简单。所以对此抱有很大的学习兴趣。再加上之前使用 Nestjs
项目很像 Spring Boot
风格寻思还不如直接使用它。
0x1 简介
Spring Boot
是由 Pivotal
团队提供的全新框架,其设计目的是用来简化新 Spring
应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot
其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven
整合了所有的 jar
包,Spring Boot
整合了所有的框架 。
0x2 Hello World
IDE:IntelliJ IDEA 2021.01
JDK:OpenJDK 1.8.0_282
由于我用的是IDEA编辑器,创建环境可以创建Spring Boot项目,当然你可以从 https://start.spring.io/ 根据自身环境直接 Generate Project
生成zip文件进行编写。
在 IDEA
创建 Spring Boot
操作步骤如下:
- 在主界面点击
Create New Project
后左边列表选择Spring Initalizr
选项,右边选项除了JDK
安装自身版本其他默认即可。 - 点击
Next
到下一步,编写项目简介请根据实际自身情况编写。没有特需直接默认下一步。 Dependencies
界面直接勾选Web-Web
选项即可- 直接
Next
下一步后IDEA
会进行构建依赖jar
包,请等待完成。 - 运行
main
方法,打开 http://localhost:8080/ 地址查看效果
0x3 文件解析
如上图所示,项目目录解析:
pom.xml
:Maven构建说明文件。DemoApplication.java
:一个带有main()
方法的类,用于启动应用程序(关键)。DemoApplicationTests.java
:一个空的Junit
测试类,它加载了一个使用Spring Boot
字典配置功能的Spring应用程序上下文。application.properties
:一个空的properties
文件,你可以根据需要添加配置属性。
pom.xml
Spring Boot父级依赖
在这儿简单说一下配置标签的意思很大的程度上和Spring MVC
工程配置是不太一样的:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
从 parent
得知该配置是 Spring Boot
父级依赖:有了这个,当前的项目就是 Spring Boot
项目了,spring-boot-starter-parent
是一个特殊的 starter
,它用来提供相关的 Maven
默认依赖,使用它之后,常用的包依赖可以省去 version 标签。关于 Spring Boot
提供了哪些 jar
包的依赖,可查看 C:\Users\Jaxson[你的用户名]\.m2\repository\org\springframework\boot\spring-boot-dependencies\2.0.2.RELEASE\spring-boot-dependencies-2.0.2.RELEASE.pom
文件得知。
所以在原有的配置文件上想升级某个依赖文件版本的话,可以直接 pom
文件添加指定的配置版本,例如:
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
起步依赖 spring-boot-starter-xx
Spring Boot
提供了很多”开箱即用“的依赖模块,都是以 spring-boot-starter-xx
作为命名的。举个例子来说明一下这个起步依赖的好处,比如组装台式机和品牌机,自己组装的话需要自己去选择不同的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是可以的。相比较之下,后者带来的效果更好点,起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就比如我们之前要实现web功能,引入了 spring-boot-starter-web
这个起步依赖。
Spring Boot Maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 把项目打包成一个可执行的超级
JAR(uber-JAR)
,包括把应用程序的所有依赖打入JAR
文件内,并为JAR
添加一个描述文件,其中的内容能让你用java -jar
来运行应用程序。 - 搜索
public static void main()
方法来标记为可运行类。
应用入口类
DemoApplication
是一个启动类,就是一个程序入口,下面添加一个入口类方法简单的演示下:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class DemoApplication {
@RequestMapping("/")
public String index() {
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication
是Sprnig Boot
项目的核心注解,主要目的是开启自动配置。main
方法这是一个标准的Java
应用的main
的方法,主要作用是作为项目启动的入口。@RestController
注解等价于@Controller + @ResponseBody
的结合,使用这个注解的类里面的方法都以json
格式输出。
启动后在浏览器会看到 Hello World
内容,一个简单的 Web
的项目就这样搞定。
0x4 进阶
在实际项目中建议使用:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
| +- CustomerController.java
|
Application.java
建议放到跟目录下面,主要用于做一些框架配置domain
目录主要用于实体(Entity)与数据访问层(Repository)service
逻辑层主要是业务类代码web(controller)
负责页面访问控制
养成一个目录清晰结构习惯是必须的...方便后期的维护性和可读性。
编写单元测试
同样测试类编写是很重要的习惯,在本实例编写简单的 http
请求测试,使用 mockmvc
进行,利用MockMvcResultHandlers.print()
打印出执行结果:
package com.example.demo;
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.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
private MockMvc mvc;
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new DemoApplication()).build();
}
@Test
public void contextLoads() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
}
}
开发环境的调试
热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot
对调试支持很好,修改之后可以实时生效,需要添加以下的配置:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
该模块在完整的打包环境下运行的时候会被禁用。如果你使用 java -jar
启动应用或者用一个特定的 classloader
启动,它会认为这是一个“生产环境”。
0x6 参考
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK