SpringBoot实验合集(持续更新中...)

实验一 使用Spring Boot构建应用程序

一、 实验目的

1、 掌握使用IntelliJ IDEA创建Spring Boot应用程序的方法;
2、 了解spring-boot-starter-parent的配置内容;
3、 掌握如何利用Starter扩展Spring Boot应用程序的功能;
4、 掌握如何配置Starter;
5、 掌握如何通过属性文件定制Spring Boot应用程序的初始化参数;
6、 掌握使用Spring Boot编写简单的单元测试;
7、 了解Spring Boot应用程序的Fat Jar文件;
8、 掌握Markdown轻量级标记语言编写README.md文件。

二、 实验环境

1、 JDK 1.8或更高版本
2、 Maven 3.6+
3、 IntelliJ IDEA

三、 实验任务

1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目;
2、 添加两个功能模块:spring MVC、lombok;
3、 添加阿里云镜像仓库作为项目maven仓库;
4、 解释项目pom.xml文件中主要标签的意义;
5、 配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器;
6、 配置Gson作为Spring Boot应用程序的默认JSON MessageConverter;(可选)
7、 修改Spring Boot应用程序启动时的Banner;(新增-2020-10-5)
8、 添加一个简单的Spring Mvc控制器组件,用于测试,如下图:

说明:
该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。@RequestMapping映射‘/’到该类的index()方法。从浏览器调用或在命令行上使用curl时,该方法返回纯文本。那是因为@RestController是复合注解,它将@Controller和@ResponseBody组合在一起,这两个注解会使Spring Mvc处理Web请求返回的是数据而不是视图。
9、 定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean。如下图:

说明:
Spring Boot应用程序初始化完成后,会自动回调所有CommandLineRunner类型的Bean的run方法。
实验中,我们自定义一个CommandLineRunner,检查由您的应用程序创建或由Spring Boot自动添加的所有bean,并对它们进行排序并打印出来。
10、 编写一个简单的单完测试。如下图:

说明:
MockMvc来自Spring Test模块,它可以让您通过一组便捷的构建器类将HTTP请求发送到DispatcherServlet中,并对结果进行断言。
注意,这里使用@AutoConfigureMockMvc和@SpringBootTest。
1)@SpringBootTest
使用完@SpringBootTest后,将创建整个应用程序上下文(加载所有配置类的Bean)。
@SpringBootTest注解告诉SpringBoot去寻找一个主配置类(例如带有@SpringBootApplication的配置类),并使用它来启动Spring应用程序上下文。SpringBootTest加载完整的应用程序并注入所有可能的bean,因此速度会很慢。
2)@AutoConfigureMockMvc
Spring在该层处理传入的HTTP请求并将其交给您的控制器。这样,几乎使用了整个堆栈,并且将以与处理真实HTTP请求完全相同的方式调用您的代码,而无需启动Servlet容器就可以进行测试。使用@AutoConfigureMockMvc注解后,则会在spring应用上下文创建MockMvc实例。在测试用例中可以注入MockMvc实例模拟http请求,MockMvc实例会把http请求转交相应的controller处理,而且不需要启动tomcat等Servlet容器。
3)@WebMvcTest 与 @MockBean
还有另一种替代方法是使用@WebMvcTest注解,它要求Spring Boot仅创建上下文的Web层(仅实例化controller组件),其它组件需要自己手动Mock(如:使用@MockBean)。这样就可以大大减少单元测试时初始化Spring上下文时加载的Bean数量,加快启动、测试Spring应用程序的速度。
与@WebMvcTes功能相类似的还有@DataJpaTest与@JsonTest。
无论使用哪种方法,Spring Boot都会自动尝试查找应用程序的主应用程序类,但是如果您要构建其他内容,则可以覆盖它或缩小它的范围。
推荐阅读:Spring Boot官方基于Web的单元测试教程
11、 使用IntelliJ IDEA的HTTP Client工具测试控制器端口;
说明:
在项目目录中生成一个以 .http 为扩展名的文件,IntelliJ IDEA会自动识别为http脚本,然后编写脚本进行调试。IntelliJ IDEA提供了http脚本的用例,如下图:

12、 在命令行中使用spring官方提供的mave插件 spring-boot 运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090;
13、 在属性文件中配置Spring Boot应用程序以debug模式运行。
说明:
在Debug模式下,Spring Boot在运行时会在终端显示更多的调式信息。
14、 在命令行中编译、打包Spring Boot应用程序。
15、 在命令行中使用java命令运行Spring Boot应用程序的Jar文件。
16、 在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090。
说明:
带参数运行jar文件,可以改变很多spring boot内置的属性。
例如:改变当前激活的属性文件:spring.profiles.active。
应用场景:部署docker时使用。
17、 使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。
建议:直接在码云网站上增加、修改markdown文件。码云的在线文本编辑器可以支持上传图片、预览markdown文件效果。
说明:
把README.md文件放置在Git仓库的根目录,当使用浏览器打开项目仓库网址时,会直接显示出来;
实验报告使用markdown标记语言编写,截图文件可以放在码云仓库的某个目录以引用,点击download按钮即可知道图片的网址,然后即可md文件中使用html标记或md标记引用图片。不建议使用Base64,会很卡;
markdown支持html标记,如:

;
md文件可以转为pdf,例如在浏览器打开md文件,另存为pdf文件。或者使用其它工工具软件转换;交实验报告时,可以直接交pdf文件,不需要word文档。
Github官方markdown语言参考文档
码云的Markdown解析器说明文档
关于在MD文件中编辑图片的例子在这个地址

四、 仓库地址

https://gitee.com/zhou-zhiqiang/spring-boot-demo1

实验二 利用Spring boot的自动装配特性实现动态注册组件

一、 实验目的

1、 掌握Spring Boot的自动配置原理;
2、 掌握Spring框架动态注册Bean的原理;
3、 掌握自动生成元数据文件。
4、 掌握spring框架的事件模型。

二、 实验环境

1、 JDK 1.8或更高版本
2、 Maven 3.6+
3、 IntelliJ IDEA

三、 实验任务

1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目。

注意:创建项目时,请选择添加 Spring Configuration Processor 依赖。
2、 创建一个自定义的CommandLineRunner接口的实现类。

注意:不要在自定义类上加@Component注解。
3、 创建一个自定义的自动配置类。

4、 创建spring.factories文件

注意:当创建一个文本文件时,idea会访问文本文件的访问类型,按上图选择。

注意:spring.factories必须放在META-INF目录下。

说明:按上图输入内容。key必须是EnableAutoConfiguration的全限定类名,值为刚才我们自定义的自动配置类的全限定类路径的类名。

测试运行程序:

运行结果:

由上图可知,我们自定义的自动配置类已经生效。
5、 给自动配置类添加有效条件。
步骤如下:

  1. 利用 @ConditionalOnProperty 注解,添加属性条件。

  2. 在application.properties属性文件中添加一个自定义的属性。

  3. 切换属性值false/true,观察终端的显示,判断自动装配的配置类是否生效。
    6、 自定义的一个Bean,绑定属性值,并生成spring配置类的元数据文件。
    步骤如下:

  4. 创建一个类,并在类上加@ConfigurationProperties注解,设置注解的prefix属性指定绑定的属性的前缀。

  5. 在某个配置类上添加@EnableConfigurationProperties,并指定装配的属性Bean。

  6. 使用spring boot框架提供的注解处理器生成自定义属性的元数据文件。
    说明:
    Spring Boot应程序打包后的jar文件中包含元数据文件,这些文件提供了所有受支持的配置属性的详细信息。这些文件旨在让IDE开发人员在编辑application.properties或application.yml文件时提供上下文帮助和“代码完成” 。Interllj IDEA默认支持。
    元数据文件位于META-INF目录下,名字spring-configuration-metadata.json。
    元数据文件可以自己写,或使用spring boot官方提供的依赖包自动生成。
    在pom.xml文件中引入spring-boot-configuration-processor依赖。这个依赖包里有spring boot提供的注解处理器,在项目编译时检查项目内所有@ConfigurationProperties的类,并生成元数据文件。
    a. 在pom.xml文件中引入spring-boot-configuration-processor依赖:

b. 编译打包项目。观察target目录下的元数据文件:

c. 现在我们再回去编辑属性文件时,只要输入属性的部分关键字,idea会自动提示,如下图:

推荐阅读:配置元数据官方文档

7、 根据阅读框架源码,我们可以自定义一个事件发布器,并设置线程池,实现异步发布事件。
注意:这个自定义的事件发布器的Bean的名称必须是“applicationEventMulticaster”。
源码如下图:
a. 自定义的事件发布器:
b. 自定义事件类。
c. 自定义事件监听器。
d. 编写一个测试用例,检查发布事件时,是否使用了多线程异步处理。

运行单元测试结果如下:

8、 自定义 ApplicationReadyEvent 的事件监听器。( 2020年10月新增 )
a. 根据SpringApplication.run方法的源码分析,当spring boot执行完所有的启动流程后,会发布 ApplicationReadyEvent 事件。
b. 从run方法源码可知,发布ApplicationReadyEvent的时间是在回调CommandLineRunner之后。
c. 尝试自定义一个ApplicationReadyEvent的事件监听器,并在终端输出指定信息,确定是在CommandLineRunner的输出信息之后。

深入思考:
在上面的例子中,我们使用了Spring Boot框架提供的默认线程池。默认线程池在自动配置类TaskExecutionAutoConfiguration中定义。我们可以自定义一个自己的线程池,这样可以配置更多的属性。尝试一下自定义一个线程池,然后给自定义的事件发布器使用。

四、 仓库地址

https://gitee.com/zhou-zhiqiang/spring-boot-demo2

实验三 全球新型冠状病毒实时数据统计应用程序的设计与实现

一、 实验目的

1、 掌握使用Spring框架自带的RestTemplate工具类爬取网络数据;
2、 掌握使用Spring框架自带的计划任务功能;
3、 掌握使用Apache Commons CSV组件解释CSV文件;
4、 掌握Java 8的Stream API处理集合类型数据;
5、 了解使用模板引擎或前端框架展示数据。

二、 实验环境

1、 JDK 1.8或更高版本
2、 Maven 3.6+
3、 IntelliJ IDEA
4、 commons-csv 1.8+

三、 实验任务

1、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目。
2、 添加功能模块:spring MVC、lombok、commons-csv等。
推荐使用commons-csv组件处理csv文件:

Apache Commons CSV 官方用户指南:
https://commons.apache.org/proper/commons-csv/user-guide.html
3、 爬取全球冠状病毒实时统计数据。(Java,Spring)
在Github上,有一个由约翰·霍普金斯大学系统科学与工程中心(JHU CSSE)运营的2020年新型冠状病毒可视化仪表板的数据仓库,大家可以从该仓库中爬取全球新型冠状病毒最新的统计数据。
Github仓库地址
该仓库会把全球新型冠状病毒最新的统计数据汇总到一个csv文件上,大家在爬取数据时,获取这个csv文件即可。
Github仓库的csv文件地址
由于国内网络访问限制的原因,我们不能正常访问Github。老师已经克隆整个仓库,并上传到Gitee,方便大家进行实验。
克隆的Gitee仓库地址
克隆的Gitee仓库的csv文件地址
4、 使用Spring框架自带的RestTemplate工具类爬取数据。
RestTemplate采用同步方式执行 HTTP 请求的类,底层使用 JDK 原生 HttpURLConnection API ,或者 HttpComponents等其他 HTTP 客户端请求类库。
RestTemplate 工具类提供模板化的方法让开发者能更简单地发送 HTTP 请求。
RestTemplate 就是 Spring框架 封装的处理同步 HTTP 请求的工具类。
RestTemplate 官方使用指南

另外,大家可以用 WebClient。

在本实验中,我们可以使用 RestTemplate 工具类获取上述的csv文件。
如果直接使用HTTP客户端请求Gitee上的文件,会报403的错误,但使用浏览器访问是正常的。经过分析,我们使用HTTP客户端请求Gitee上的文件时,需要设置一个请求头部User-Agent,否则会报403异常。
当我们使用 RestTemplate 工具类时,可以如下图所示设置请求头部并请求数据:

如上图所示,我们先实例化一个RequestEntity对象,再通过RestTemplate的exchange方法获取csv文件,这个文件的数据会封装到一个Resource对象中。我们可以通过Resource对象的getInputStream方法获取csv文件的输入流。
5、 分析csv文件的数据结构,定义model类。
如下图所示,这是一个model类的样例:

6、 使用Apache Commons CSV组件解释CSV文件。
CSV文件WIKI
CSV文件是由任意数目的记录组成的,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。CSV文件是以纯文本形式存储表格数据(数字和文本)。
为了方便应用程序处理,我们通常会把csv文件的每条记录转换为一个modle类的对象,即上一步中我们定义的model类。
把所有的model类的对象组织为一个集合,如:List 。最终,这个csv文件会转换为一个List对象。然后我们可以根据实际的业务逻辑,访问这个List即可。
我们可以定义一个Service组件处理csv文件的转换逻辑,并把最终转换后的List对象赋值给这个Service组件的成员属性,以便应用程序访问这个List对象。
使用Apache Commons CSV组件,我们可以很方便地解释CSV文件,详细使用方法可以浏览官方的用户指南。
提示:
record.get(“Province/State”) 可以获取记录某个字段名的值;
record.get(“11/8/20”) 可以获取某个地区的指定时间的病毒数值;
record.get(record.size() - 1) 可以获取记录最后一个字段的值;
7、 使用Spring框架自带的计划任务功能定时更新统计数据。
Scheduling Tasks计划任务官方使用指南
要实现计划任务,首先通过在配置类上添加 @EnableScheduling 注解来开启对计划任务的支持,然后在要执行计划任务的方法上注解 @Scheduled,声明这是一个计划任务。
其中 @Scheduled 注解中有以下几个参数:

  1. cron:cron表示式,指定任务在特定时间执行;
  2. fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型这long,单位ms;
  3. fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
  4. fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;
  5. fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
  6. initialDelay:表示延迟多久后再第一次執行任務,参数类型为long,單位ms;
  7. initialDelayString:与initialDelay的含义一样,只是参数类型变为String;
  8. zone:时区,默认为当前时区,一般不需要设置。
    如下图所示,例子中配置了每天凌晨1点执行定时任务,更新统计数据:

另外,可以在cron参数中使用${…}占位符,读取属性文件中的自定义属性配置cron参数,如下图所示:

在属性文件中自定义属性配置cron表达式,如下图所示:

当cron="-"时,表示关闭计划任务。

注意:在Spring Boot应用程序中,Spring框架自带的计划任务默认是在单线程中执行的,这是因为Spring Boot在初始化计划任务线程池的时候,默认的线程池大小是 1 ,也就是说只有一个线程来执行所有计划任务,那么当有一个计划任务要耗费很长时间执行时,其它的计划任务即使到了执行时间点也只能继续等待。
我们可以通过属性文件设置计划任务线程池的大小,实现并行执行计划任务,如下图所示:

推荐大家阅读关于计划任务功能的Spring Boot自动配置类,如下图所示:
8、 要确保应用程序启动时,获取一次统计数据。
提示:
1、 InitializingBean;
2、 @PostConstruct;
3、 CommandLineRunner;
9、 单元测试。
必须编写单元测试。
所有控制器 与 Service 组件,必须写单元测试用例进行测试。
如下图所示,例子中演示了如何对一个Service组件进行单元测试。

提示:掌握如何配置@SpringBootTest注解的属性,从而构造一个精简的单元测试环境。
10、 定义Cotroller控制器。
我们需要定义一个控制器,用于返回数据给前端展示。
控制器必须支持查询功能。如:可以选择查询某个地区或国家的新型冠状病毒实时统计数据。
提示:
1、 使用Java 8的Stream API可以很方便地访问集合类型对象,如:List ;
2、 parallelStream支持并行流,可以大大提升访问性能;
3、 filter方法支持设置过滤条件;
4、 Collectors.toUnmodifiableList()收集为不可变的List集合。
11、 定义前端数据展示页面。
可以使用 任何视图引擎 或 任何前端框架 构建前端数据展示。
要求:界面美观、整洁,支持查询功能。如果页面包含图表展示功能,加15分。

四、 仓库地址

https://gitee.com/zhou-zhiqiang/spring-boot-demo3

实验四 基于Spring Security码云OAuth2认证的实验仓库

一、实验目的

1、掌握使用Spring Security框架
2、掌握配置Spring Security的安全过滤链
3、掌握编写Spring Security单元测试
4、掌握创建接入码云的应用
5、掌握码云OAuth2认证基本流程
6、掌握使用码云API
7、了解使用模板引擎或前端框架制作用户登录界面

二、实验环境

1、JDK1.8或更高版本
2、Maven3.6+
3、Intelij IDEA

三、实验任务

1、登录码云,fork实验四的作业仓库。
仓库地址:https://gitee.com/dgut-sai/spring-security-gitee-experiment-4
2、根据下面的步骤填充代码,运行并测试成功;
1)OAuth2基本认证流程。
输入图片说明
2)步骤一:创建接入码云的应用
码云参考文档:https://gitee.com/api/v5/oauth_doc#/list-item-3
回调地址必需是:http://localhost:8080/login/oauth2/code/gitee
输入图片说明
3)步骤二:编写重定向的业务逻辑
当用户访问/oauth2/gitee时,本重定向过滤器拦截请求,并将用户重定向到码云第三方认证页面上。 输入图片说明
4)步骤三:使用码云access_token API向码云认证服务器发送post请求获取access_token。 输入图片说明
5)步骤四:使用码云API获取授权用户的资料
码云参考文档:https://gitee.com/api/v5/swagger#/getV5User 输入图片说明
6)步骤五:把自定义的两个Filter加进安全过滤链 输入图片说明
7)步骤六:把我们自定义的SecurityConfigurer应用到安全过滤链 输入图片说明
8)步骤七:改造/user接口,返回码云用户资料给前端;改造user.fth模板用于显示用户资料。 输入图片说明 输入图片说明
9)步骤八:单元测试。模拟一个登录用户,访问受保护的接口/test,断言接口的返回内容body部分是否一致。 输入图片说明
10)实现部分 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明

四、仓库地址:

https://gitee.com/zhou-zhiqiang/spring-security-gitee-experiment-4

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 1、基于springboot的天气预报系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip 基于springboot的天气预报系统源码.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值