注意:本 Spring Boot 系列文章基于 Spring Boot 版本最新版 2.4.2 进行学习分析,版本不同可能会有细微差别。另外springboot-springcloud是实现微服务生态的一种,并不说明使用springboot就是实现了微服务。
根据上文学习微服务系列(一):认识微服务 的介绍相信大家对与微服务都有所了解了,也知晓微服务的作用以及微服务生态中涉及的技术和中间件。
Spring Boot 是什么
相信大家对于Spring肯定不陌生,在JAVA这个技术圈中Spring占据着举足轻重的地位,SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品。
SpringBoot官网下的介绍咱们看一下:
用固定的方式来构建生产级别的spring应用。Spring Boot 推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。
我们之前使用的ssh乃至springMVC都需要一系列的xml配置。各种注入关系各种参数配置,一旦哪个配置漏下了服务就启动不了。SpringBoot的目的就是为了简化Spring 应用开发而生,我理解之所以叫SpringBoot这个Boot的含义就是快的意思,意思就是基于Spring但是非常快的意思。Spring Boot 可以在零配置情况下一键启动,跟我们平时启动运行一个JAVA类一样简洁而优雅。
Spring Boot 优势
- 快速的创建 Spring 项目可以集成各种组件以及与主流框架的一键式集成。
- 内部包含 Servlet 容器,容器技术可选,不同场景和业务可以选择不同容器同时可以不需要打成war包。
- 可集成很多的依赖(Starters)自动依赖与版本控制,减少包冲突引发的问题。
- 大量的自动化配置,基本所有配置都可以通过java类加注解实现,简化了开发。
- 不需要配置 XML 文件,主要有关注你的业务实现即可。
总结:springboot简化了依赖,简化了配置,简化了部署,简化了监控,方便了研发。
Spring Boot 前提
那么使用 Spring Boot 进行开发需要掌握哪些知识呢?Spring Boot 非常好用,但是并不是 0 基础就可以直接上手的。我们需要具备:
- Java 语言基础是必备的
- Spring 框架的使用,最好了解一下Spring的核心机制。
- SpringMVC最好使用过,或者用spring开发过web应用。
- Maven 构建工具的使用。
- IDEA 或其他开发工具的使用(优选idea)。
Spring Boot 构建
现在我们已经了解了 Spring Boot 是什么,下面我们将使用 Spring Boot 开发一个入门案例,来体验 Spring Boot 开发是多么的优雅与迅速。 Spring Boot 官方已经为我们如何快速启动 Spring Boot 应用程序提供了多种方式。 Spring Boot 的服务构建非常简单,常用的有几种:
可以在 Spring 官方网站直接生成项目下载导入IDE进行开发。spring官网:start.spring.io/
如上图页面左半部分:
- 选择构建方式
- 编程语言选择
- Spring Boot 版本选择(1.0和2.0有区别,建议使用2.0)
- 所属group设置(一般我们用倒置的域名作为 Group 的值)
- 项目标识设置(区分项目用的比如官方提供的都是spring-boot-starter-xxx这种的)
- 项目名称设置一般与项目标识相同
- 默认包名设置
- 打包方式选择(我们可以选择jar或者war) 页面右半部分:
- 添加项目依赖(也可以后期通过pom自己添加)
- 生成下载项目
使用IDEA生成项目
步骤和含义基本与从spring官网生成是一样的,此处就不赘述了,小伙伴可以自己去体验一下。接下来我就按照用idea生成好的服务来说明,看一下服务生成的结构:
咋样~~简单吧,一目了然。
- com-demopro-test 是我们指定的项目名称;
- src/main/java 是 Java 源代码目录,存放我们编写的 Java 代码;
- src/main/resources 目录是静态资源目录,存放图片、脚本文件、配置文件等静态资源;
- src/test/java 目录是测试目录,存放测试类。
- target 目录存放我们打包生成的内容;
- pom.xml 是项目的 Maven 配置文件,指定了项目的基本信息以及依赖项,Maven 就是通过配置文件得知项目构建规则的。
到此刻为止,Spring Boot 项目也没啥新鲜的。都是之前了解过的东西,跟普通的 Maven 项目也没啥区别。我们需要什么依赖就去pom中增加对应的maven依赖。有的小伙伴不理解pom中有段代码是什么含义:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这段配置就是指定了一个插件,用来构建、运行、打包 Spring Boot 项目。
Spring Boot 开发
服务的启动类
@SpringBootApplication
public class ComDemoproTestApplication {
public static void main(String[] args) {
SpringApplication.run(ComDemoproTestApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("启动加载的bean对象");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
这个类就是整个服务的启动类,我增加了一个CommandLineRunner方法主要是为输出一下当服务启动时spring帮我们实例化了多少bean对象。@SpringBootApplication注解是一个集合注解,包含了以下几个:
- @Configuration 定义配置类。
- @EnableAutoConfiguration 开启自动配置。
- @EnableWebMvc 标记为 web应用程序。
- @ComponentScan 组件扫描。
启动后从日志上我们能看到:
说明服务启动成功。这样就是一个springboot服务成功运行了,接下来我们就补充一下对应的目录结构,增加不同目录编写不同的业务类就好了。
这样写大家是不是就熟悉了,搞过springMVC的对于这个结构都会不陌生。我们写个controller测试一下:
通过访问http://localhost:8080/ 进入controller 将返回值返回给页面。我们同样可以在springboot服务中集成页面框架如thymeleaf等页面框架。或者用我们熟悉的jsp作为渲染页面也是可以的。我们做个整合jsp页面渲染的例子吧。
整合jsp渲染页面
- 在pom文件中增加依赖
<!-- Server -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
- 在application.properties中增加如下配置
#Server
server.port=8099
#MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
spring.resources.static-locations=classpath:/static/
- 在与java文件夹同级文件夹下增加webapp目录并加入WEB-INF/view/index.jsp 。
- 启动类中增加继承和实现类
这样我们就可以通过controller返回到指定的jsp页面,并且把数据也返回给页面,页面就可以通过el表达式正常获取数据了。
Thymeleaf 也可以使用 HTML 作为模板文件使用起来要比jsp简单的多,感兴趣的小伙伴自己实现一下哈, JSP页面渲染用户群体广泛,所以用jsp做个例子说明。但是2种方式,都是一种模板引擎而已,将控制器返回数据转化为 HTML 页面显示,本质上没啥区别,大家对模板引擎有一个了解即可。