1、开发者工具与单元测试

1.1、开发者工具 devtools

springboot-devtools可以提高开发者的工作效率,最方便的地方莫过于热部署了。

1.1.1 devtools实战:三步,依赖、Compile、Registry

导入依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <optional>true</optional>
  5. </dependency>

image.png
开启热部署

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <fork>true</fork>
  </configuration>
</plugin>

image.pngimage.pngimage.pngimage.pngimage.png

1.1.2 基本原理

Spring Boot中使用的自动重启技术涉及两个类加载器,一个是baseclassloader,用来加载不会变化的类,例如项目引用的第三方的jar;另一个是restartclassloader,用米加软开及有日口与的云变化的类。当项目需要重启时, restartclassloader将被一个新创建的类加载器代替,而 baseclassloader则继续使用原来的,这种启动方式要比冷启动快很多,因为baseclassloader已经存在并且已经加载好。

1.1.3 自定义监控资源:添加或排除导致重启的目录、设置特定文件重启

image.pngimage.png

1.1.4 LiveReload —针对静态资源的重启解决方法

上一小节介绍了静态资源目录下的文件变化以及模板文件的变化不会引发重启,虽然开发者可以通过修改配置改变这一默认情况,但实际上并没有必要,因为静态文件不是class。devtools默认嵌入了LiveReload 服务器,可以解决静态文件的热部署,LiveReload可以在资源发生变化时自动触发浏览器更新。
安装LiveReload插件
image.png

1.1.5 禁用重启:直接删除依赖就好、或者配置文件上禁用

image.png

1.1.6 全局配置(一次配置,所有项目都不用配置了)

image.pngimage.png

1.2、单元测试

1.2.1、基本用法

image.pngimage.png
image.png

Service测试

image.png

Controller测试

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

JSON测试(没用到过,用到再说吧)

image.pngimage.pngimage.png

2、Springboot缓存

image.pngimage.png

2.1、Ehcache 2.x 缓存

2.1.1、添加缓存

1.导入依赖:springboot缓存、ehcache缓存
image.png
2.在resources目录下创建配置文件ehcache.xml(此时springboot会自动把EhCacheCacheManager作为缓存的实现)
image.png
diskStore:缓存满了,数据的默认存放地址
image.pngimage.pngimage.png

2.1.2、使用缓存

image.png

让springboot使用缓存。

分三步:1.主类上加上缓存注解 2.给要设置缓存的方法上添加缓存
image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

2.2、使用redis缓存

image.pngimage.png
其他都一样,就把配置文件改一下就行了。
为啥都一样?就像前面说的。类似JDBC封装了所有的数据库一样。springboot的缓存封装了各种不同的缓存。

2.3、redis集群缓存

2.3.1、配置缓存

1.先搭好redis集群。

@Configuration
public class RedisCacheConfig {
    @Autowired
    RedisConnectionFactory conFactory;
    @Bean
    RedisCacheManager redisCacheManager() {
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        RedisCacheConfiguration redisCacheConfig = RedisCacheConfiguration
                                                    .defaultCacheConfig()
                                                    .prefixKeysWith("sang:")
                                                    .disableCachingNullValues()
                                                    .entryTtl(Duration.ofMinutes(30));
        configMap.put("c1", redisCacheConfig);
        RedisCacheWriter cachewriter = RedisCacheWriter.nonLockingRedisCacheWriter(conFactory);
        RedisCacheManager redisCacheManager = new RedisCacheManager(cachewriter, RedisCacheConfiguration.defaultCacheConfig(), configMap);
        return redisCacheManager;
    }
}

image.pngimage.pngimage.png

2.3.2、使用缓存

image.pngimage.pngimage.pngimage.pngimage.pngimage.png
这里使用缓存和前面的代码一模一样。还是那个原因:springboot缓存封装了各种不同的缓存实现。