SpringBoot入门到精通(三):热部署与单元测试

热部署与单元测试

  有兴趣的可以先参考附录简单了解SpringBoot自动装配流程。

一.SpringBoot开发热部署

  项目开发中,你是否也遇到更新配置文件信息后,必须重启项目的,否则数据不更新的问题?

  Spring Boot提供了一个名为spring-boot-devtools的模块来使应用支持热部署,提高开发效率,修改后无需手动重启Spring Boot应用。使用也非常简单,在pom.xmI中加入devtools的依赖就可以了。当然,首次引入后,项目应用需要重启。否则不生效。

1 <!-- SpringBoot热部署依赖 -->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-devtools</artifactId>
5 </dependency>

 二.SprongBoot单元测试

  对于java开发者而言,Junit应该无人不知了。所以SpringBoot也是基于Junit进行单位测试的。测试代码位置:建议在:src/test/java目录下

  SpringBoot测试开发,只需要在pom中引入测试依赖即可使用,默认SpringBoot会排除低版本的Junit测试包。(SpringBoot推荐使用Junit5.x或更高版本)

  JUnit中的注解测试常用注解:

    @BeforeClass:针对所有测试,在每个类加载的开始和结束时运行,必须为静态方法:static void
    @Before:初始化方法,执行当前测试类的每个测试方法前执行。
    @Test:测试方法,在这里可以测试期望异常和超时时间
    @After:释放资源,执行当前测试类的每个测试方法后执行
    @AfterClass:针对所有测试,在每个类加载的开始和结束时运行,必须为静态方法:static void
    @Ignore:忽略的测试方法(只在测试类的时候生效,单独执行该测试方法无效)基本不用
    @RunWith:可以更改测试运行器 ,用来告诉JUnit不要使用内置的org.junit.runner.Runner进行单元测试,而应该使用指定的类做单元测试,对于Spring单元测试总是要使用 SpringRunner.class 。(一般不用)
    一个单元测试类执行顺序为:

    @BeforeClass –> @Before –> @Test –> @After –> @AfterClass

    每一个测试方法的调用顺序为:

    @Before –> @Test –> @After

1.测试案例

  1. 新建SpringBoot项目,默认会导入测试依赖,如果没有请手动修改pom文件导入。
     1 <!-- SpringBoot测试依赖 -->
     2 <dependency>
     3     <groupId>org.springframework.boot</groupId>
     4     <artifactId>spring-boot-starter-test</artifactId>
     5     <scope>test</scope>
     6     <!-- 排除junit.vintage -->
     7     <exclusions>
     8         <exclusion>
     9             <groupId>org.junit.vintage</groupId>
    10             <artifactId>junit-vintage-engine</artifactId>
    11         </exclusion>
    12     </exclusions>
    13 </dependency>
    
  2. 在src/test/java目录下新建测试类。
      @SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。
     1 @SpringBootTest
     2 class SpringBootApplicationTests {
     3     
     4     @Autowired
     5     IDCard  idcard;
     6     
     7     @Test
     8     void contextLoads() {
     9         System.out.println("测试:"+idcard);
    10     }
    11     
    12 }
    
  3. 选中测试方法名,右键执行Junit Test即可。
    其他的测试注解:略。自行演示!

附录

  SpringBoot自动装配原理分析,这里简单将源码抠出,可以自行理解(为便于注释编辑)

  Eclipse按住Ctrl见不松,鼠标左键点击注解@SpringBootApplication,查看@SpringBootApplication注解源码。

1 @Target(ElementType.TYPE)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 @Inherited
5 @SpringBootConfiguration    // SpringBoot的基础配置:其引入的注解类使用了注解@Configuration,实际就是将启动类实现Spring管理
6 @EnableAutoConfiguration    // 启用自动装配(自动配置)  进入看源码
7 @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
8         @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
9 public @interface SpringBootApplication {
1 @Target(ElementType.TYPE)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 @Inherited
5 @AutoConfigurationPackage // 自动配置注解包
6 @Import(AutoConfigurationImportSelector.class)// 导入自动装配选择器类(不是所有的信息都自动装配的,不使用的内容,不应该加载,由这个类实现排除),继续看源码
7 public @interface EnableAutoConfiguration {
 1 public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware,
 2 ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {
 3     private static final AutoConfigurationEntry EMPTY_ENTRY = new AutoConfigurationEntry();
 4     // 省略其他方法等代码
 5     /**
 6      * 该方法是一个获取自动装配项的方法,内部通过业务处理实现排除和选择使用的自动装配项
 7      * @param    annotationMetadata 是注解元数据(个人理解指的是应用中注解)
 8      */
 9     protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
10         // 判断:没有/已启用注解源数据
11         if (!isEnabled(annotationMetadata)) {
12             return EMPTY_ENTRY;// 没有启用则直接返回自动装配配置对象(到此就止了)
13         }
14         // 获取所有注解属性
15         AnnotationAttributes attributes = getAttributes(annotationMetadata);
16         // 调用方法获取所有可用配置:具体有那些可以看下一个方法
17         List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
18         // 这个步骤实现了筛选重复的配置信息
19         configurations = removeDuplicates(configurations);
20         // 获取所有需要排除的属性集(没有在项目中应用的)
21         Set<String> exclusions = getExclusions(annotationMetadata, attributes);
22         // 根据重复信息,和配出属性集,检查要排除的类
23         checkExcludedClasses(configurations, exclusions);
24         // 删除所有需要排除的属性集
25         configurations.removeAll(exclusions);
26         // 根据剩下的正确配置属性集,获取配置过滤器
27         configurations = getConfigurationClassFilter().filter(configurations);
28         // 启动自动装配的导入事件
29         fireAutoConfigurationImportEvents(configurations, exclusions);
30         // 返回所有自动配置项
31         return new AutoConfigurationEntry(configurations, exclusions);
32     }
33     
34     // 省略其他方法等代码
35     /**
36      * 该方法将根据注解源数据和注解属性获取所有默认可用的配置信息
37      */
38     protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
39         // 读取所有可用配置信息,从下面的一行代码中可以看出它所加载读取的文件
40         List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
41                 getBeanClassLoader());
42         // 判断集合中是否为空,若为空,则说明没有找到可用的自动配置信息(读取的文件时META-INF/spring.factories。)
43         Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
44                 + "are using a custom packaging, make sure that file is correct.");
45         // 最后返回读取的配置信息集合
46         return configurations;
47     }

Mavne找到Spring-Boot-autoconfigrue依赖,进入包META-INF打开文件:spring.factories

在上图中,配置源会判断是否启用自动装配,也只会加载已启用的配置,只要我们在pom文件中引入的组件,SpringBoot都会帮我们自动配置。

可以通过在核心配置文件中添加如下代码,实现控制台显示配置详情:

debug: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架。它通过提供默认配置、自动配置和运行时的应用程序监视来简化Spring应用程序的开发和部署。要从入门精通Spring Boot,你可以按照以下步骤进行: 1. 下载和安装Java开发工具包(JDK):确保你的计算机上安装了Java开发工具包,并且配置了正确的环境变量。 2. 学习Java基础知识:Spring Boot是基于Java的,所以在学习Spring Boot之前,你需要掌握Java的基本概念和语法。 3. 学习Spring框架:Spring Boot是建立在Spring框架之上的,所以在学习Spring Boot之前,你需要对Spring框架有一定的了解。你可以学习Spring框架的核心概念,例如依赖注入、控制反转、面向切面编程等。 4. 学习Spring Boot的核心特性:Spring Boot提供了许多特性和功能,包括自动配置、起步依赖、嵌入式服务器等。你可以学习如何使用这些特性来简化和加速Spring应用程序的开发。 5. 实践项目:通过实践项目来巩固你对Spring Boot的理解和应用。你可以创建一个简单的Web应用程序,使用Spring Boot来处理请求和响应,以及与数据库进行交互。 6. 学习Spring Boot的高级特性:一旦你掌握了Spring Boot的基本知识,你可以进一步学习Spring Boot的高级特性,如安全性、微服务架构、监控和管理等。 7. 参考文档和教程:阅读官方文档和教程以深入了解Spring Boot的各个方面。官方文档提供了详细的指南和示例代码,可以帮助你更好地理解和应用Spring Boot。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值