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项目,当然你可以从 根据自身环境直接 generate project 生成zip文件进行编写。
在 idea 创建 spring boot 操作步骤如下:
- 在主界面点击 create new project 后左边列表选择 spring initalizr 选项,右边选项除了 jdk 安装自身版本其他默认即可。
- 点击 next 到下一步,编写项目简介请根据实际自身情况编写。没有特需直接默认下一步。
- dependencies 界面直接勾选 web-web 选项即可
- 直接 next 下一步后 idea 会进行构建依赖 jar 包,请等待完成。
- 运行 main 方法,打开 地址查看效果
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 启动,它会认为这是一个“生产环境”。
0x5 参考
building an application with spring boot
以上就是spring boot 入门指南的详细内容,更多关于spring boot 入门的资料请关注其它相关文章!