当前位置:   article > 正文

SpringBoot框架的原理和使用_springboot框架工作原理及流程

springboot框架工作原理及流程

1、SpringBoot框架的选择和原理

    本项目是民航大数据平台的缩影,本系统数据量大并涉及大数据的处理,需要进行后端的分离,并且后端选择分布式的成熟框架。

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来建行新Spring应用的初始搭建及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不需要定义样板化的配置。

    SpringBoot所具备的特征:

  • 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
  • 内嵌Tomcat或Jetty等Servle容器;
  • 提供自动配置的”starter”项目对象模型(POMS)以简化Maven配置;
  • 尽可能自动配置Spring容器;
  • 提供准备好的特性,如指标、健康检查和外部化配置;
  • 没有代码生成,不需要配置XML配置。

2、MyBatis-Plus

  • MyBatis-Plus 是一个 MyBatis增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。

官网地址:https://mp.baomidou.com/

MyBatis-Plus 特性:https://baomidou.com/pages/24112f/#%E7%89%B9%E6%80%A7

  • 在IDEA中创建SpringBoot程序,并使用MyBatis-Plus,首先需要在IDEA中安装MyBatis-Plus插件

3、使用IDEA创建SpringBoot项目

  • 双击桌面上的“ideaU”图标,打开IDEA工具
  • 点击“+ Create New Project”,开始创建一个新项目:

  • 在左侧菜单找到Spring Initializr,点击Next。注意,这里IDEA默认使用https://start.spring.io  提供的在线模板,所以需要保证网络畅通。当然也可以选择Custorm指定链接加载模版。例如,如果出现start.spring.io服务器连接异常或超时的情况,可以修改Server URL,将在线模板服务器设置为国内的服务器,如下所示:

  • 按照实际情况依次填写项目信息。Type是Maven或者Gradle,选择JDK版本,Packaging属性下可以选择jar或者war等,填写完毕点击Next:

  • 选择Web-->Spring Web Services,点击Next:

注意,这里Spring Boot选择任意版本即可,例如:在图中使用的是2.7.11,但是在实际环境中Spring Boot的版本是动态变化的,请根据自己当前的环境进行设置,一般来说选择一个2.7.x的任意版本都可以。

  • 点击Finish,完成创建。
  • 等待IDEA构建好项目后,项目结构如下图所示:

  • 在IDEA中创建SpringBoot程序,并使用MyBatis-Plus,首先需要在IDEA中安装MyBatis-Plus插件

依次点击 File --> Settings,在打开的面板中选择 Plugins,搜索 MyBatisX并安装即可:

  • 项目会下载所需的依赖包,需要待较长的时间,所以可以自行下载安装Maven,并配置国内仓库源

1)从官方网站下载最新版本即可,中文网下载地址: https://maven.org.cn/download.html ,注意,Maven 3.9+ requires JDK 8 or above to execute. It still allows you to build against 1.3 and other JDK versions by using toolchains。当前项目环境已经提供了安装文件,存放在Client节点的/opt/software目录下。

2)进入/opt/software目录,解压安装Maven到/opt/目录下

  1. [root@client ~]# cd /opt/software
  2. [root@client software]# tar -zxvf apache-maven-3.9.1-bin.tar.gz -C /opt/

3)配置Maven使用国内源,进入Maven配置目录 (例如:/opt/apache-maven-3.9.1/conf)

  1. [root@client software]# cd /opt/apache-maven-3.9.1/conf
  2. [root@client conf]# vim settings.xml

4)修改settings.xml文件,在<mirrors></mirrors>标签内将其他的<mirror>标签注释掉或删除掉,然后添加如下内容:

  1. <mirror>
  2. <id>huaweicloud</id>
  3. <mirrorOf>*</mirrorOf>
  4. <url>https://mirrors.huaweicloud.com/repository/maven/</url>
  5. </mirror>

  • 在IDEA工具中配置使用上一步安装配置好的Maven插件

1)依次点击 “File”->"Settings",打开设置面板,然后找到“Build,Execution,Deployment”->“Build Tools”->“Maven”

2)设置如下内容,来配置Maven插件

  • 查看pom.xml文件,项目所需依赖都在这里,此时项目会下载所需的依赖包,需要待一段时间

为了支持MyBatis-Plus需要在<dependencies> </dependencies>标签内添加MyBatis-Plus的相关依赖:

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.4.1</version>
  5. </dependency>

还需添加MySQL相关依赖,为了简化代码,引入 lombok 依赖(减少 getter、setter 等方法):

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.18</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.projectlombok</groupId>
  8. <artifactId>lombok</artifactId>
  9. <version>1.18.10</version>
  10. </dependency>

点击如下图所示图标,更新Maven引用:

替换启动类(DemoApplication.java)头部声明

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

启动项目:

启动成功后显示访问端口8080。

停止项目:

4、实现REST请求

  • 创建项目结构

首先我们在com.example.demo包下,分别创建model包(用于存放model)、dao包(用于存放数据访问文件)、controller包(用于存放控制器)、service包(用于存放主要的程序逻辑代码)。

右键com.example.demo选择New-->Package创建包

创建com.example.demo.model包

按照上述方式继续创建dao包、controller包、service包,项目结构如下:

  • 实现model

在model包中创建一个Java Class文件,名为Test.java,并写入以下内容:

  1. package com.example.demo.model;
  2. public class Test {
  3. private final long id;
  4. private final String content;
  5. public Test(long id,String content) {
  6. this.id = id;
  7. this.content = content;
  8. }
  9. public long getId() {
  10. return id;
  11. }
  12. public String getContent() {
  13. return content;
  14. }
  15. }
  • 实现Controller

在controller包中创建一个Java Class文件,名为TestController.java,并写入以下内容:

  1. package com.example.demo.controller;
  2. import java.util.concurrent.atomic.AtomicLong;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RequestParam;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import com.example.demo.model.Test;
  7. @RestController
  8. public class TestController {
  9. private static final String template = "Hello,%s!";
  10. private final AtomicLong counter = new AtomicLong();
  11. @RequestMapping("/test")
  12. public Test dealTest(@RequestParam(value="name", defaultValue="World") String name) {
  13. return new Test(counter.incrementAndGet(),String.format(template, name));
  14. }
  15. }
  • 打开DemoApplication.java文件,启动项目

控制台选项卡会打印运行日志,如下我们可以看到监听到本地8080端口。

  • 打开浏览器,访问页面

刷新页面,可以看到计数器加1后的效果:

5、创建定时器

使用SpringBoot基于注解来创建定时任务非常简单,代码如下。

  • 在com.example.demo包下,创建task包,并在task包中创建一个Java Class文件,名为StaticScheduleTask.java
  1. package com.example.demo.task;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.scheduling.annotation.EnableScheduling;
  4. import org.springframework.scheduling.annotation.Scheduled;
  5. @Configuration //1.主要用于标记配置类,兼备Component的效果。
  6. @EnableScheduling // 2.开启定时任务
  7. public class StaticScheduleTask {
  8. //3.添加定时任务,每隔5秒打印一次“Schedule Task”
  9. @Scheduled(cron = "0/5 * * * * ?")
  10. private void testTask() {
  11. System.out.println("Schedule Task");
  12. }
  13. }
  • 修改启动文件DemoApplication.java,开启定时任务
  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.scheduling.annotation.EnableScheduling;
  5. import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  6. @EnableScheduling //开启定时任务
  7. @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
  8. public class DemoApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(DemoApplication.class, args);
  11. }
  12. }
  • 运行项目,会在控制台显示定时任务,打印的结果,每隔5秒打印一次“Schedule Task”

6、测试MyBatis-Plus的使用

  • 在node3节点上,进入mysql客户端命令行模式
[root@node3 ~]# mysql -uroot -p123456
  • 创建一个MySQL表,并添加一些测试数据:
  1. DROP DATABASE IF EXISTS testMyBatisPlus;
  2. CREATE DATABASE testMyBatisPlus;
  3. USE testMyBatisPlus;
  4. DROP TABLE IF EXISTS user;
  5. CREATE TABLE user
  6. (
  7. id BIGINT(20) NOT NULL COMMENT '主键ID',
  8. name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
  9. age INT(11) NULL DEFAULT NULL COMMENT '年龄',
  10. email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
  11. PRIMARY KEY (id)
  12. );
  13. INSERT INTO user (id, name, age, email) VALUES
  14. (1, 'Jone', 18, 'test1@baomidou.com'),
  15. (2, 'Jack', 20, 'test2@baomidou.com'),
  16. (3, 'Tom', 28, 'test3@baomidou.com'),
  17. (4, 'Sandy', 21, 'test4@baomidou.com'),
  18. (5, 'Billie', 24, 'test5@baomidou.com');
  • 返回Client节点,在项目的resources目录添加 application.yml 文件,在文件中配置 mysql 数据源信息(注意:缩进
  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. username: root
  5. password: 123456
  6. url: jdbc:mysql://node3:3306/testMyBatisPlus?autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&serverTimezone=UTC

如上url中的node3不建议修改为IP地址,在真实开发过程中测试环境与生产环境的IP地址不一样。

  • 在com.example.demo包下创建entity包,用于存放实体类,在entity包中创建数据库中user表对应的实体类User.java类:
  1. package com.example.demo.entity;
  2. import lombok.Data;
  3. @Data
  4. public class User {
  5. private Long id;
  6. private String name;
  7. private int age;
  8. private String email;
  9. }
  • 在com.example.demo包下创建mapper包,用于存放数据操作类,在mapper包中创建操作数据表实体类的Mapper类UserMapper.java,该类直接继承BaseMapper,可以省去xml的编写,当然也支持通过xml自定义sql查询语句:
  1. package com.example.demo.mapper;
  2. import com.example.demo.entity.User;
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. public interface UserMapper extends BaseMapper<User> {
  5. }

BaseMapper里封装了一些常用的CRUD方法:

  • 实体类、Mapper 类都写好了,就可以使用了,首先需要在启动类DemoApplication 里扫描 Mapper 类,即添加 @MapperScan 注解,修改后的DemoApplication文件内容如下:
  1. package com.example.demo;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  6. @MapperScan("com.example.demo.mapper")
  7. @SpringBootApplication
  8. public class DemoApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(DemoApplication.class, args);
  11. }
  12. }
  • 在src/test/java/com/example/demo/包下,创建一个测试类TestMybatisPlusApplicationTests.java 测试一下
  1. package com.example.demo;
  2. import com.example.demo.entity.User;
  3. import com.example.demo.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import java.util.List;
  8. @SpringBootTest
  9. class TestMybatisPlusApplicationTests {
  10. @Autowired
  11. private UserMapper userMapper;
  12. @Test
  13. public void testSelect() {
  14. System.out.println(("----- selectAll method test ------"));
  15. List<User> userList = userMapper.selectList(null);
  16. for(User user:userList) {
  17. System.out.println(user);
  18. }
  19. }
  20. }
  • 注意:MyBatis-plus与Spring的版本有兼容性的要求,例如mybatis-plus-boot-starter 3.4.1对应的Spring的版本使用2.4.5,否则可能会出现与MybatisPlus不兼容的情况,当然也可以选择其他相兼容的版本。
  • 所以需要修改pom.xml,将spring-boot-starter-parent的版本改为2.4.5,mybatis-plus-boot-starter 版本为3.4.1
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.4.5</version>
  9. </parent>
  10. <groupId>com.example</groupId>
  11. <artifactId>demo</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>demo</name>
  14. <description>Demo project for Spring Boot</description>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web-services</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-test</artifactId>
  26. <scope>test</scope>
  27. </dependency>
  28. <dependency>
  29. <groupId>com.baomidou</groupId>
  30. <artifactId>mybatis-plus-boot-starter</artifactId>
  31. <version>3.4.1</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>mysql</groupId>
  35. <artifactId>mysql-connector-java</artifactId>
  36. <scope>runtime</scope>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.projectlombok</groupId>
  40. <artifactId>lombok</artifactId>
  41. <version>1.18.10</version>
  42. </dependency>
  43. </dependencies>
  44. <build>
  45. <plugins>
  46. <plugin>
  47. <groupId>org.springframework.boot</groupId>
  48. <artifactId>spring-boot-maven-plugin</artifactId>
  49. </plugin>
  50. </plugins>
  51. </build>
  52. </project>
  • 更新Maven依赖

  • 运行测试类

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/987941
推荐阅读
相关标签
  

闽ICP备14008679号