7

Spring Boot 入门

 2 years ago
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.
neoserver,ios ssh client

Spring Boot 入门

Jaxson Wang • 2021年05月25日 • 编程技术 • 阅读量 5 次 • 评论量 0 个

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/ 地址查看效果

5b1f52e8ecd4e.png

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);
    }
 
}
  • @SpringBootApplicationSprnig 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
      |
markup
  • 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 参考

Building an Application with Spring Boot


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK