SpringBoot缓存技术整合Ehcache

首先说明一下,这里使用的是Springboot2.2.6.RELEASE版本,由于Springboot迭代很快,所以要注意版本问题。

1、SpringBoot整合Ehcache,修改pom文件,添加缓存支持启动器,和Ehcache缓存依赖jar包。

 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.2.6.RELEASE</version>
 9         <relativePath/> <!-- lookup parent from repository -->
10     </parent>
11     <groupId>com.bie.springboot</groupId>
12     <artifactId>springboot-redis</artifactId>
13     <version>0.0.1-SNAPSHOT</version>
14     <name>springboot-redis</name>
15     <description>Demo project for Spring Boot</description>
16 
17     <properties>
18         <java.version>1.8</java.version>
19     </properties>
20 
21     <dependencies>
22         <!-- springBoot 的启动器 -->
23         <dependency>
24             <groupId>org.springframework.boot</groupId>
25             <artifactId>spring-boot-starter-web</artifactId>
26         </dependency>
27         <!-- 测试工具的启动器 -->
28         <dependency>
29             <groupId>org.springframework.boot</groupId>
30             <artifactId>spring-boot-starter-test</artifactId>
31             <scope>test</scope>
32             <!-- <exclusions>
33                 <exclusion>
34                     <groupId>org.junit.vintage</groupId>
35                     <artifactId>junit-vintage-engine</artifactId>
36                 </exclusion>
37             </exclusions> -->
38         </dependency>
39 
40         <!-- springBoot thymeleaf的启动器 -->
41         <dependency>
42             <groupId>org.springframework.boot</groupId>
43             <artifactId>spring-boot-starter-thymeleaf</artifactId>
44         </dependency>
45         <!-- springBoot 的启动器 -->
46         <dependency>
47             <groupId>org.springframework.boot</groupId>
48             <artifactId>spring-boot-starter-data-jpa</artifactId>
49         </dependency>
50         <!-- mysql -->
51         <dependency>
52             <groupId>mysql</groupId>
53             <artifactId>mysql-connector-java</artifactId>
54         </dependency>
55         <!-- druid 连接池 -->
56         <dependency>
57             <groupId>com.alibaba</groupId>
58             <artifactId>druid</artifactId>
59             <version>1.0.9</version>
60         </dependency>
61         <!-- SpringBoot 缓存支持启动器,只是支持了缓存,但是没有加入ehcache的jar包 -->
62         <dependency>
63             <groupId>org.springframework.boot</groupId>
64             <artifactId>spring-boot-starter-cache</artifactId>
65         </dependency>
66         <!-- Ehcache 坐标 -->
67         <dependency>
68             <groupId>net.sf.ehcache</groupId>
69             <artifactId>ehcache</artifactId>
70         </dependency>
71     </dependencies>
72 
73     <build>
74         <plugins>
75             <plugin>
76                 <groupId>org.springframework.boot</groupId>
77                 <artifactId>spring-boot-maven-plugin</artifactId>
78             </plugin>
79         </plugins>
80     </build>
81 
82 </project>

创建Ehcache的配置文件,文件名:ehcache.xml,所放置的位置:src/main/resources/ehcache.xml。

 1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2          xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 3 
 4     <diskStore path="java.io.tmpdir"/>
 5 
 6     <!--defaultCache:echcache的默认缓存策略 -->
 7     <!--
 8         maxElementsInMemory:缓存多少个对象。
 9         eternal:是否做持久化处理。
10         timeToIdleSeconds:当前对象去访问缓存里面的对象时间间隔,单位是秒,超过120秒,从缓存中删除。
11         timeToLiveSeconds:当前对象从创建到在缓存里面的声明周期是多长时间,单位是秒,默认120秒,超过120秒,从缓存中删除。
12         maxElementsOnDisk:
13         diskExpiryThreadIntervalSeconds:
14         memoryStoreEvictionPolicy
15     -->
16     <defaultCache
17             maxElementsInMemory="10000"
18             eternal="false"
19             timeToIdleSeconds="120"
20             timeToLiveSeconds="120"
21             maxElementsOnDisk="10000000"
22             diskExpiryThreadIntervalSeconds="120"
23             memoryStoreEvictionPolicy="LRU">
24         <persistence strategy="localTempSwap"/>
25     </defaultCache>
26 
27     <!-- 自定义缓存策略,自定义缓存策略的name属性值是users,定义多个缓存策略,name值是不可以相同的 -->
28     <cache name="users"
29            maxElementsInMemory="10000"
30            eternal="false"
31            timeToIdleSeconds="120"
32            timeToLiveSeconds="120"
33            maxElementsOnDisk="10000000"
34            diskExpiryThreadIntervalSeconds="120"
35            memoryStoreEvictionPolicy="LRU">
36         <persistence strategy="localTempSwap"/>
37     </cache>
38 
39 </ehcache>

修改application.properties 文件,告知springboot,自己当前配置的ehcache.xml位置在那里,springboot在启动的时候可以对ehcache.xml配置文件进行解析,拿到缓存策略,交给ehcache去缓存处理。

 1 # mysql驱动
 2 # spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 3 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 4 # mysql链接
 5 spring.datasource.url=jdbc:mysql://localhost:3306/biehl?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
 6 # mysql账号
 7 spring.datasource.username=root
 8 # mysql密码
 9 spring.datasource.password=123456
10 
11 # 使用druid
12 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
13 
14 # 执行更新操作
15 spring.jpa.hibernate.ddl-auto=update
16 # spring.jpa.hibernate.ddl-auto=validate
17 
18 # 后台打印sql语句
19 spring.jpa.show-sql=true
20 
21 # 告知springboot,自己当前配置的ehcache.xml位置在那里
22 spring.cache.ehcache.config=classpath:config/ehcache.xml

修改启动类SpringbootRedisApplication,新增@EnableCaching注解,springboot在启动的时候对缓存进行额外的启动。

 1 package com.bie.springboot.springbootredis;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.cache.annotation.EnableCaching;
 6 
 7 @SpringBootApplication
 8 @EnableCaching
 9 public class SpringbootRedisApplication {
10 
11     public static void main(String[] args) {
12         SpringApplication.run(SpringbootRedisApplication.class, args);
13     }
14 
15 }

创建实体类,如下所示:

 1 package com.bie.springboot.po;
 2 
 3 import javax.persistence.*;
 4 
 5 @Entity
 6 @Table(name = "users")
 7 public class Users {
 8 
 9     @Id
10     @GeneratedValue(strategy = GenerationType.IDENTITY)
11     @Column(name = "id")
12     private Integer id;
13 
14     @Column(name = "name")
15     private String name;
16 
17     @Column(name = "age")
18     private Integer age;
19 
20     public String getName() {
21         return name;
22     }
23 
24     public void setName(String name) {
25         this.name = name;
26     }
27 
28     public Integer getId() {
29         return id;
30     }
31 
32     public void setId(Integer id) {
33         this.id = id;
34     }
35 
36     public Integer getAge() {
37         return age;
38     }
39 
40     public void setAge(Integer age) {
41         this.age = age;
42     }
43 
44     public Users(Integer id, String name, Integer age) {
45         this.id = id;
46         this.name = name;
47         this.age = age;
48     }
49 
50     @Override
51     public String toString() {
52         return "Users{" +
53                 "id=" + id +
54                 ", name='" + name + '\'' +
55                 ", age=" + age +
56                 '}';
57     }
58 
59     public Users() {
60     }
61 }

创建dao层,数据交互层,这里使用了jpa,如果想要迅速开发,用这个还不错吧。

 1 package com.bie.springboot.dao;
 2 
 3 import com.bie.springboot.po.Users;
 4 import org.springframework.data.jpa.repository.JpaRepository;
 5 
 6 /**
 7  * 参数一 T :当前需要映射的实体
 8  * 参数二 ID :当前映射的实体中的OID的类型
 9  */
10 public interface UsersRepository extends JpaRepository<Users, Integer> {
11 }

创建业务交互层的接口,和业务交互层的实现类,如下所示:

 1 package com.bie.springboot.service;
 2 
 3 import com.bie.springboot.po.Users;
 4 import org.springframework.data.domain.Page;
 5 import org.springframework.data.domain.Pageable;
 6 
 7 import java.util.List;
 8 
 9 public interface UsersService {
10 
11     /**
12      * 查询所有用户
13      *
14      * @return
15      */
16     public List<Users> findUserAll();
17 
18     /**
19      * 根据用户编号查询用户信息
20      *
21      * @return
22      */
23     public Users findUsersById(Integer id);
24 
25     /**
26      * 分页查询用户信息
27      *
28      * @param pageable
29      * @return
30      */
31     public Page<Users> findUserByPage(Pageable pageable);
32 
33     /**
34      * 保存用户信息
35      *
36      * @param users
37      */
38     public void saveUers(Users users);
39 }
 1 package com.bie.springboot.service.impl;
 2 
 3 import com.bie.springboot.dao.UsersRepository;
 4 import com.bie.springboot.po.Users;
 5 import com.bie.springboot.service.UsersService;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.data.domain.Example;
 8 import org.springframework.data.domain.Page;
 9 import org.springframework.data.domain.Pageable;
10 import org.springframework.stereotype.Service;
11 
12 import java.util.List;
13 
14 @Service
15 public class UsersServiceImpl implements UsersService {
16 
17     // 注入usersRepository
18     @Autowired
19     private UsersRepository usersRepository;
20 
21     @Override
22     public List<Users> findUserAll() {
23         return this.usersRepository.findAll();
24     }
25 
26     @Override
27     //@Cacheable:对当前查询的对象做缓存处理,value的值是自定义缓存策略的名称
28     // @Cacheable(value = "users")
29     public Users findUsersById(Integer id) {
30         Users users = new Users();
31         users.setId(id);
32         Example<Users> example = Example.of(users);
33         return this.usersRepository.findOne(example).get();
34     }
35 
36     @Override
37     public Page<Users> findUserByPage(Pageable pageable) {
38         return this.usersRepository.findAll(pageable);
39     }
40 
41     @Override
42     public void saveUers(Users users) {
43         this.usersRepository.save(users);
44     }
45 
46 }

开始测试,使用测试类测试缓存的使用,嗯,各种炸裂报错。

 1 package com.bie.springboot.springbootredis;
 2 
 3 import com.bie.springboot.SpringbootRedisApplication;
 4 import com.bie.springboot.service.UsersService;
 5 import org.junit.jupiter.api.Test;
 6 import org.junit.runner.RunWith;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.boot.test.context.SpringBootTest;
 9 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10 
11 @RunWith(SpringJUnit4ClassRunner.class)
12 @SpringBootTest(classes = SpringbootRedisApplication.class)
13 class SpringbootRedisApplicationTests {
14 
15     @Autowired
16     private UsersService usersService;
17 
18     @Test
19     public void testFindUserById() {
20         //第一次查询
21         System.out.println(this.usersService.findUsersById(1));
22         //第二次查询
23         System.out.println(this.usersService.findUsersById(1));
24     }
25 
26 }

如果报错,java.sql.SQLException: validateConnection false,这里我操作的是修改了使用druid的版本。

 15   .   ____          _            __ _ _
 16  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 17 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 18  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 19   '  |____| .__|_| |_|_| |_\__, | / / / /
 20  =========|_|==============|___/=/_/_/_/
 21  :: Spring Boot ::        (v2.2.6.RELEASE)
 22 
 23 2020-05-16 15:21:58.472  INFO 5404 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : Starting SpringbootRedisApplicationTests on DESKTOP-V37QSSE with PID 5404 (started by biehl in D:\program\idea\IntelliJ IDEA 2019.1.3\workspace_idea\springboot-redis)
 24 2020-05-16 15:21:58.477  INFO 5404 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : No active profile set, falling back to default profiles: default
 25 2020-05-16 15:21:59.748  INFO 5404 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
 26 2020-05-16 15:21:59.826  INFO 5404 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 61ms. Found 1 JPA repository interfaces.
 27 2020-05-16 15:22:01.495  INFO 5404 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
 28 2020-05-16 15:22:01.596  INFO 5404 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.12.Final
 29 2020-05-16 15:22:01.810  INFO 5404 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
 30 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
 31 2020-05-16 15:22:02.068  WARN 5404 --- [           main] c.a.d.p.v.MySqlValidConnectionChecker    : Cannot resolve com.mysq.jdbc.Connection.ping method.  Will use 'SELECT 1' instead.
 32 
 33 java.lang.NullPointerException: null
 34     at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.<init>(MySqlValidConnectionChecker.java:48) ~[druid-1.0.9.jar:1.0.9]
 35     at com.alibaba.druid.pool.DruidDataSource.initValidConnectionChecker(DruidDataSource.java:878) [druid-1.0.9.jar:1.0.9]
 36     at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:594) [druid-1.0.9.jar:1.0.9]
 37     at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:915) [druid-1.0.9.jar:1.0.9]
 38     at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:911) [druid-1.0.9.jar:1.0.9]
 39     at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:98) [druid-1.0.9.jar:1.0.9]
 40     at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 41     at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 42     at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 43     at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 44     at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 45     at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 46     at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 47     at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 48     at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 49     at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 50     at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 51     at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 52     at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 53     at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 54     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 55     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
 56     at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) [spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 57     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 58     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) [spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 59     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) [spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 60     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 61     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 62     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 63     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 64     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 65     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 66     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 67     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 68     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 69     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 70     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 71     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 72     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 73     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 74     at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 75     at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126) ~[spring-boot-test-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 76     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 77     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 78     at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 79     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 80     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 81     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 82     at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 83     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 84     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 85     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 86     at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_191]
 87     at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_191]
 88     at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_191]
 89     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_191]
 90     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_191]
 91     at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:1.8.0_191]
 92     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) ~[na:1.8.0_191]
 93     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[na:1.8.0_191]
 94     at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[na:1.8.0_191]
 95     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:336) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 96     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:259) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 97     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:252) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 98     at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_191]
 99     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:251) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
100     at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
101     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
102     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
103     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
104     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
105     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
106     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
107     at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
108     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) ~[junit-platform-engine-1.5.2.jar:1.5.2]
109     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
110     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
111     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
112     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
113     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
114     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
115     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
116     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
117     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
118     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
119     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
120     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
121     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
122     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
123     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
124     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
125     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
126     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
127     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
128     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
129     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.5.2.jar:1.5.2]
130     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.5.2.jar:1.5.2]
131     at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.5.2.jar:1.5.2]
132     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
133     at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
134     at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
135     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
136     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
137     at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69) ~[junit5-rt.jar:na]
138     at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) ~[junit-rt.jar:na]
139     at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) ~[junit-rt.jar:na]
140     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) ~[junit-rt.jar:na]
141 
142 2020-05-16 15:22:02.082  INFO 5404 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
143 2020-05-16 15:22:02.298 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
144 
145 java.sql.SQLException: validateConnection false
146     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
147     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
148     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
149 
150 2020-05-16 15:22:02.311 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
151 
152 java.sql.SQLException: validateConnection false
153     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
154     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
155     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
156 
157 2020-05-16 15:22:02.317 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
158 
159 java.sql.SQLException: validateConnection false
160     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
161     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
162     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
163 
164 2020-05-16 15:22:02.322 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
165 
166 java.sql.SQLException: validateConnection false
167     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
168     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
169     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
170 
171 2020-05-16 15:22:02.327 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
172 
173 java.sql.SQLException: validateConnection false
174     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
175     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
176     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
177 
178 2020-05-16 15:22:02.331 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
179 
180 java.sql.SQLException: validateConnection false
181     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
182     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
183     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
184 
185 2020-05-16 15:22:02.335 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
186 
187 java.sql.SQLException: validateConnection false
188     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
189     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
190     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
191 
192 2020-05-16 15:22:02.341 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
193 
194 java.sql.SQLException: validateConnection false
195     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
196     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
197     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
198 
199 2020-05-16 15:22:02.344 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
200 
201 java.sql.SQLException: validateConnection false
202     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
203     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
204     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
205 
206 2020-05-16 15:22:02.349 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
207 
208 java.sql.SQLException: validateConnection false
209     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
210     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
211     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
212 
213 2020-05-16 15:22:02.353 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
214 
215 java.sql.SQLException: validateConnection false
216     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
217     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
218     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
219 
220 2020-05-16 15:22:02.359 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
221 
222 java.sql.SQLException: validateConnection false
223     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
224     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
225     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
226 
227 2020-05-16 15:22:02.363 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
228 
229 java.sql.SQLException: validateConnection false
230     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
231     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
232     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
233 
234 2020-05-16 15:22:02.366 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
235 
236 java.sql.SQLException: validateConnection false
237     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
238     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
239     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
240 
241 2020-05-16 15:22:02.369 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
242 
243 java.sql.SQLException: validateConnection false
244     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
245     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
246     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
247 
248 2020-05-16 15:22:02.374 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
249 
250 java.sql.SQLException: validateConnection false
251     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
252     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
253     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
254 
255 2020-05-16 15:22:02.378 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
256 
257 java.sql.SQLException: validateConnection false
258     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
259     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
260     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
261 
262 2020-05-16 15:22:02.381 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
263 
264 java.sql.SQLException: validateConnection false
265     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
266     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
267     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
268 
269 2020-05-16 15:22:02.385 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
270 
271 java.sql.SQLException: validateConnection false
272     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
273     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
274     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
275 
276 2020-05-16 15:22:02.389 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
277 
278 java.sql.SQLException: validateConnection false
279     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
280     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
281     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
282 
283 2020-05-16 15:22:02.397 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
284 
285 java.sql.SQLException: validateConnection false
286     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
287     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
288     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
289 
290 2020-05-16 15:22:02.400 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
291 
292 java.sql.SQLException: validateConnection false
293     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
294     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
295     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
296 
297 2020-05-16 15:22:02.404 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
298 
299 java.sql.SQLException: validateConnection false
300     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
301     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
302     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
303 
304 2020-05-16 15:22:02.407 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
305 
306 java.sql.SQLException: validateConnection false
307     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
308     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
309     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
310 
311 2020-05-16 15:22:02.410 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
312 
313 java.sql.SQLException: validateConnection false
314     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
315     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
316     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
317 
318 2020-05-16 15:22:02.413 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
319 
320 java.sql.SQLException: validateConnection false
321     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
322     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
323     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
324 
325 2020-05-16 15:22:02.416 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
326 
327 java.sql.SQLException: validateConnection false
328     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
329     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
330     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
331 
332 2020-05-16 15:22:02.420 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
333 
334 java.sql.SQLException: validateConnection false
335     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
336     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
337     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
338 
339 2020-05-16 15:22:02.423 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
340 
341 java.sql.SQLException: validateConnection false
342     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
343     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
344     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
345 
346 2020-05-16 15:22:02.427 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
347 
348 java.sql.SQLException: validateConnection false
349     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
350     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
351     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
352 
353 2020-05-16 15:22:02.430 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
354 
355 java.sql.SQLException: validateConnection false
356     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
357     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
358     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
359 
360 2020-05-16 15:22:32.437 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
361 
362 java.sql.SQLException: validateConnection false
363     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
364     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
365     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
366 
367 2020-05-16 15:23:02.454 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
368 
369 java.sql.SQLException: validateConnection false
370     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
371     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
372     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
373 
374 2020-05-16 15:23:32.459 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
375 
376 java.sql.SQLException: validateConnection false
377     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
378     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
379     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
380 
381 2020-05-16 15:24:02.466 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
382 
383 java.sql.SQLException: validateConnection false
384     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
385     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
386     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
387 
388 2020-05-16 15:24:32.472 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
389 
390 java.sql.SQLException: validateConnection false
391     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
392     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
393     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
394 
395 2020-05-16 15:25:02.479 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
396 
397 java.sql.SQLException: validateConnection false
398     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
399     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
400     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]
401 
402 2020-05-16 15:25:32.489 ERROR 5404 --- [eate-1440939580] com.alibaba.druid.pool.DruidDataSource   : create connection error
403 
404 java.sql.SQLException: validateConnection false
405     at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1216) ~[druid-1.0.9.jar:1.0.9]
406     at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1439) ~[druid-1.0.9.jar:1.0.9]
407     at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1844) ~[druid-1.0.9.jar:1.0.9]

将版本druid1.0.9换成了druid1.1.10版本,解决了这个报错问题。

1 <!-- druid 连接池 -->
2 <dependency>
3     <groupId>com.alibaba</groupId>
4     <artifactId>druid</artifactId>
5     <version>1.0.9</version>
6 </dependency>

嗯,如果遇到这个错误,可以修改一下ehcache.xml文件的位置。

 16   .   ____          _            __ _ _
 17  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 18 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 19  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 20   '  |____| .__|_| |_|_| |_\__, | / / / /
 21  =========|_|==============|___/=/_/_/_/
 22  :: Spring Boot ::        (v2.2.6.RELEASE)
 23 
 24 2020-05-16 15:29:09.021  INFO 15524 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : Starting SpringbootRedisApplicationTests on DESKTOP-V37QSSE with PID 15524 (started by biehl in D:\program\idea\IntelliJ IDEA 2019.1.3\workspace_idea\springboot-redis)
 25 2020-05-16 15:29:09.023  INFO 15524 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : No active profile set, falling back to default profiles: default
 26 2020-05-16 15:29:10.030  INFO 15524 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
 27 2020-05-16 15:29:10.147  INFO 15524 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 98ms. Found 1 JPA repository interfaces.
 28 2020-05-16 15:29:10.824  WARN 15524 --- [           main] o.s.w.c.s.GenericWebApplicationContext   : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Unsatisfied dependency expressed through method 'cacheManager' parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheCacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
 29 2020-05-16 15:29:10.835  INFO 15524 --- [           main] ConditionEvaluationReportLoggingListener : 
 30 
 31 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
 32 2020-05-16 15:29:10.844 ERROR 15524 --- [           main] o.s.boot.SpringApplication               : Application run failed
 33 
 34 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Unsatisfied dependency expressed through method 'cacheManager' parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheCacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
 35     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 36     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:539) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 37     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 38     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 39     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 40     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 41     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 42     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 43     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 44     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 45     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 46     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 47     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 48     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 49     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 50     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 51     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 52     at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 53     at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126) [spring-boot-test-2.2.6.RELEASE.jar:2.2.6.RELEASE]
 54     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 55     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 56     at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 57     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 58     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 59     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 60     at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 61     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 62     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 63     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 64     at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_191]
 65     at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_191]
 66     at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_191]
 67     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_191]
 68     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_191]
 69     at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:1.8.0_191]
 70     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) ~[na:1.8.0_191]
 71     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[na:1.8.0_191]
 72     at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[na:1.8.0_191]
 73     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:336) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 74     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:259) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 75     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:252) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 76     at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_191]
 77     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:251) [junit-jupiter-engine-5.5.2.jar:5.5.2]
 78     at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 79     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 80     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 81     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 82     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
 83     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 84     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 85     at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 86     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 87     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
 88     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 89     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 90     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 91     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 92     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 93     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 94     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 95     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 96     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 97     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
 98     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
 99     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
100     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
101     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
102     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
103     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
104     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
105     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
106     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
107     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.5.2.jar:1.5.2]
108     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.5.2.jar:1.5.2]
109     at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.5.2.jar:1.5.2]
110     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
111     at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
112     at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
113     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
114     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
115     at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69) ~[junit5-rt.jar:na]
116     at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) ~[junit-rt.jar:na]
117     at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) ~[junit-rt.jar:na]
118     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) ~[junit-rt.jar:na]
119 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheCacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
120     at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
121     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
122     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
123     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
124     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
125     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
126     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
127     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
128     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
129     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
130     at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
131     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1290) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
132     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1210) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
133     at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
134     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
135     ... 83 common frames omitted
136 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
137     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
138     at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
139     ... 97 common frames omitted
140 Caused by: java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
141     at org.springframework.util.Assert.isTrue(Assert.java:136) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
142     at org.springframework.boot.autoconfigure.cache.CacheProperties.resolveConfigLocation(CacheProperties.java:110) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar:2.2.6.RELEASE]
143     at org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration.ehCacheCacheManager(EhCacheCacheConfiguration.java:54) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar:2.2.6.RELEASE]
144     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
145     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
146     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
147     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
148     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
149     ... 98 common frames omitted
150 
151 2020-05-16 15:29:10.849 ERROR 15524 --- [           main] o.s.test.context.TestContextManager      : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@2ea41516] to prepare test instance [com.bie.springboot.springbootredis.SpringbootRedisApplicationTests@5b498842]
152 
153 java.lang.IllegalStateException: Failed to load ApplicationContext
154     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
155     at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
156     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
157     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
158     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
159     at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:98) [spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
160     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$5(ClassBasedTestDescriptor.java:337) [junit-jupiter-engine-5.5.2.jar:5.5.2]
161     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:342) [junit-jupiter-engine-5.5.2.jar:5.5.2]
162     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:337) [junit-jupiter-engine-5.5.2.jar:5.5.2]
163     at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_191]
164     at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_191]
165     at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_191]
166     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_191]
167     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_191]
168     at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:1.8.0_191]
169     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) ~[na:1.8.0_191]
170     at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[na:1.8.0_191]
171     at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) ~[na:1.8.0_191]
172     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:336) [junit-jupiter-engine-5.5.2.jar:5.5.2]
173     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:259) [junit-jupiter-engine-5.5.2.jar:5.5.2]
174     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:252) [junit-jupiter-engine-5.5.2.jar:5.5.2]
175     at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_191]
176     at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:251) [junit-jupiter-engine-5.5.2.jar:5.5.2]
177     at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:29) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
178     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
179     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
180     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
181     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.5.2.jar:5.5.2]
182     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
183     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
184     at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:107) ~[junit-platform-engine-1.5.2.jar:1.5.2]
185     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:75) ~[junit-platform-engine-1.5.2.jar:1.5.2]
186     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
187     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
188     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
189     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
190     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
191     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
192     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
193     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
194     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
195     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
196     at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_191]
197     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.5.2.jar:1.5.2]
198     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.5.2.jar:1.5.2]
199     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
200     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125) ~[junit-platform-engine-1.5.2.jar:1.5.2]
201     at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135) ~[junit-platform-engine-1.5.2.jar:1.5.2]
202     at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123) ~[junit-platform-engine-1.5.2.jar:1.5.2]
203     at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.5.2.jar:1.5.2]
204     at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122) ~[junit-platform-engine-1.5.2.jar:1.5.2]
205     at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80) ~[junit-platform-engine-1.5.2.jar:1.5.2]
206     at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.5.2.jar:1.5.2]
207     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.5.2.jar:1.5.2]
208     at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.5.2.jar:1.5.2]
209     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
210     at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
211     at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
212     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
213     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) ~[junit-platform-launcher-1.5.2.jar:1.5.2]
214     at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69) ~[junit5-rt.jar:na]
215     at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) ~[junit-rt.jar:na]
216     at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) ~[junit-rt.jar:na]
217     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) ~[junit-rt.jar:na]
218 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Unsatisfied dependency expressed through method 'cacheManager' parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheCacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
219     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
220     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:539) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
221     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
222     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
223     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
224     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
225     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
226     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
227     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
228     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
229     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
230     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
231     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
232     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
233     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
234     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
235     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
236     at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
237     at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:126) ~[spring-boot-test-2.2.6.RELEASE.jar:2.2.6.RELEASE]
238     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
239     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.2.5.RELEASE.jar:5.2.5.RELEASE]
240     ... 63 common frames omitted
241 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheCacheManager' defined in class path resource [org/springframework/boot/autoconfigure/cache/EhCacheCacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
242     at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
243     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
244     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
245     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
246     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
247     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
248     at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
249     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
250     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
251     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
252     at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
253     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1290) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
254     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1210) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
255     at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
256     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
257     ... 83 common frames omitted
258 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.sf.ehcache.CacheManager]: Factory method 'ehCacheCacheManager' threw exception; nested exception is java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
259     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
260     at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
261     ... 97 common frames omitted
262 Caused by: java.lang.IllegalArgumentException: Cache configuration does not exist 'ServletContext resource [/ehcache.xml]'
263     at org.springframework.util.Assert.isTrue(Assert.java:136) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
264     at org.springframework.boot.autoconfigure.cache.CacheProperties.resolveConfigLocation(CacheProperties.java:110) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar:2.2.6.RELEASE]
265     at org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration.ehCacheCacheManager(EhCacheCacheConfiguration.java:54) ~[spring-boot-autoconfigure-2.2.6.RELEASE.jar:2.2.6.RELEASE]
266     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
267     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
268     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
269     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
270     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
271     ... 98 common frames omitted
272 
273 
274 Process finished with exit code -1

ehcache.xml的位置修改为,如下所示位置即可。

springboot默认的文件的加载路径:/META-INF/resources/、/resources/、/static/、/public/。所以不在该路径下面的文件,就要自己讲文件路径添加到工程里面,用过classpath:config/ehcache.xml的方式

如果此时,加上了@Cacheable(value = "users")方法,value的值是自定义缓存策略的名称,那么实体类就要实现可序列化接口,不然报错。Ehcache支持磁盘缓存,既然是磁盘缓存就要实现可序列号接口。

 1 package com.bie.springboot.po;
 2 
 3 import javax.persistence.*;
 4 import java.io.Serializable;
 5 
 6 @Entity
 7 @Table(name = "users")
 8 public class Users implements Serializable {
 9 
10     @Id
11     @GeneratedValue(strategy = GenerationType.IDENTITY)
12     @Column(name = "id")
13     private Integer id;
14 
15     @Column(name = "name")
16     private String name;
17 
18     @Column(name = "age")
19     private Integer age;
20 
21     public String getName() {
22         return name;
23     }
24 
25     public void setName(String name) {
26         this.name = name;
27     }
28 
29     public Integer getId() {
30         return id;
31     }
32 
33     public void setId(Integer id) {
34         this.id = id;
35     }
36 
37     public Integer getAge() {
38         return age;
39     }
40 
41     public void setAge(Integer age) {
42         this.age = age;
43     }
44 
45     public Users(Integer id, String name, Integer age) {
46         this.id = id;
47         this.name = name;
48         this.age = age;
49     }
50 
51     @Override
52     public String toString() {
53         return "Users{" +
54                 "id=" + id +
55                 ", name='" + name + '\'' +
56                 ", age=" + age +
57                 '}';
58     }
59 
60     public Users() {
61     }
62 }

报错,如下所示:

  1   .   ____          _            __ _ _
  2  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  3 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  4  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  5   '  |____| .__|_| |_|_| |_\__, | / / / /
  6  =========|_|==============|___/=/_/_/_/
  7  :: Spring Boot ::        (v2.2.6.RELEASE)
  8 
  9 2020-05-16 15:35:39.853  INFO 17968 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : Starting SpringbootRedisApplicationTests on DESKTOP-V37QSSE with PID 17968 (started by biehl in D:\program\idea\IntelliJ IDEA 2019.1.3\workspace_idea\springboot-redis)
 10 2020-05-16 15:35:39.855  INFO 17968 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : No active profile set, falling back to default profiles: default
 11 2020-05-16 15:35:41.202  INFO 17968 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
 12 2020-05-16 15:35:41.277  INFO 17968 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 61ms. Found 1 JPA repository interfaces.
 13 2020-05-16 15:35:43.043  INFO 17968 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
 14 2020-05-16 15:35:43.128  INFO 17968 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.12.Final
 15 2020-05-16 15:35:43.290  INFO 17968 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
 16 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
 17 2020-05-16 15:35:43.506  INFO 17968 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
 18 2020-05-16 15:35:43.673  INFO 17968 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect
 19 2020-05-16 15:35:44.350  INFO 17968 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
 20 2020-05-16 15:35:44.356  INFO 17968 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
 21 2020-05-16 15:35:44.919  WARN 17968 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
 22 2020-05-16 15:35:45.213  INFO 17968 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
 23 2020-05-16 15:35:45.484  WARN 17968 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
 24 2020-05-16 15:35:45.721  INFO 17968 --- [           main] c.b.s.s.SpringbootRedisApplicationTests  : Started SpringbootRedisApplicationTests in 6.279 seconds (JVM running for 8.114)
 25 Hibernate: select users0_.id as id1_0_, users0_.age as age2_0_, users0_.name as name3_0_ from users users0_ where users0_.id=1
 26 -------------------------------------Users{id=1, name='admin', age=27}
 27 -------------------------------------Users{id=1, name='admin', age=27}
 28 2020-05-16 15:35:46.206  INFO 17968 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
 29 2020-05-16 15:35:46.207  INFO 17968 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
 30 2020-05-16 15:35:46.207 ERROR 17968 --- [     users.data] n.s.e.store.disk.DiskStorageFactory      : Disk Write of 1 failed: 
 31 
 32 java.io.NotSerializableException: com.bie.springboot.po.Users
 33     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[na:1.8.0_191]
 34     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[na:1.8.0_191]
 35     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441) ~[na:1.8.0_191]
 36     at net.sf.ehcache.Element.writeObject(Element.java:876) ~[ehcache-2.10.6.jar:2.10.6]
 37     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
 38     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
 39     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
 40     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
 41     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) ~[na:1.8.0_191]
 42     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) ~[na:1.8.0_191]
 43     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[na:1.8.0_191]
 44     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[na:1.8.0_191]
 45     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) ~[na:1.8.0_191]
 46     at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97) ~[ehcache-2.10.6.jar:2.10.6]
 47     at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:403) ~[ehcache-2.10.6.jar:2.10.6]
 48     at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:385) ~[ehcache-2.10.6.jar:2.10.6]
 49     at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:477) ~[ehcache-2.10.6.jar:2.10.6]
 50     at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1071) [ehcache-2.10.6.jar:2.10.6]
 51     at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1055) [ehcache-2.10.6.jar:2.10.6]
 52     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_191]
 53     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_191]
 54     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_191]
 55     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191]
 56     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191]
 57     at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191]
 58 
 59 2020-05-16 15:35:46.221  INFO 17968 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
 60 2020-05-16 15:35:46.229 ERROR 17968 --- [extShutdownHook] n.s.e.store.disk.DiskStorageFactory      : Disk Write of 1 failed: 
 61 
 62 java.io.NotSerializableException: com.bie.springboot.po.Users
 63     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[na:1.8.0_191]
 64     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[na:1.8.0_191]
 65     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441) ~[na:1.8.0_191]
 66     at net.sf.ehcache.Element.writeObject(Element.java:876) ~[ehcache-2.10.6.jar:2.10.6]
 67     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
 68     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
 69     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
 70     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
 71     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) ~[na:1.8.0_191]
 72     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) ~[na:1.8.0_191]
 73     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[na:1.8.0_191]
 74     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[na:1.8.0_191]
 75     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) ~[na:1.8.0_191]
 76     at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97) ~[ehcache-2.10.6.jar:2.10.6]
 77     at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:403) [ehcache-2.10.6.jar:2.10.6]
 78     at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:385) [ehcache-2.10.6.jar:2.10.6]
 79     at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:477) ~[ehcache-2.10.6.jar:2.10.6]
 80     at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1071) [ehcache-2.10.6.jar:2.10.6]
 81     at net.sf.ehcache.store.disk.DiskStorageFactory$IndexWriteTask.call(DiskStorageFactory.java:1108) [ehcache-2.10.6.jar:2.10.6]
 82     at net.sf.ehcache.store.disk.DiskStorageFactory.unbind(DiskStorageFactory.java:921) [ehcache-2.10.6.jar:2.10.6]
 83     at net.sf.ehcache.store.disk.DiskStore.dispose(DiskStore.java:664) [ehcache-2.10.6.jar:2.10.6]
 84     at net.sf.ehcache.store.CacheStore.dispose(CacheStore.java:342) [ehcache-2.10.6.jar:2.10.6]
 85     at net.sf.ehcache.Cache.dispose(Cache.java:2582) [ehcache-2.10.6.jar:2.10.6]
 86     at net.sf.ehcache.CacheManager.shutdown(CacheManager.java:1552) [ehcache-2.10.6.jar:2.10.6]
 87     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
 88     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
 89     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
 90     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
 91     at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:339) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 92     at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:273) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 93     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:571) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 94     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:543) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 95     at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1075) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 96     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:504) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 97     at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1068) [spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 98     at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1060) [spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
 99     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1029) [spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
100     at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:948) [spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
101 
102 
103 Process finished with exit code 0

效果,如下所示,一次查询,第二次查询的话,就可以直接从缓存中取出。

@Cacheable作用:把方法的返回值添加到Ehcache中做缓存。

Value属性:指定一个Ehcache配置文件中的缓存策略,如果没有给定value,name则表示使用默认的缓存策略。
Key属性:给存储的值起个名称。在查询时如果有名称相同的,那么则知己从缓存中将数据返回。

 1 package com.bie.springboot.service.impl;
 2 
 3 import com.bie.springboot.dao.UsersRepository;
 4 import com.bie.springboot.po.Users;
 5 import com.bie.springboot.service.UsersService;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.cache.annotation.Cacheable;
 8 import org.springframework.data.domain.Example;
 9 import org.springframework.data.domain.Page;
10 import org.springframework.data.domain.Pageable;
11 import org.springframework.stereotype.Service;
12 
13 import java.util.List;
14 
15 @Service
16 public class UsersServiceImpl implements UsersService {
17 
18     // 注入usersRepository
19     @Autowired
20     private UsersRepository usersRepository;
21 
22     @Override
23     public List<Users> findUserAll() {
24         return this.usersRepository.findAll();
25     }
26 
27     @Override
28     //@Cacheable:对当前查询的对象做缓存处理,value的值是自定义缓存策略的名称
29     @Cacheable(value = "users")
30     public Users findUsersById(Integer id) {
31         Users users = new Users();
32         users.setId(id);
33         Example<Users> example = Example.of(users);
34         return this.usersRepository.findOne(example).get();
35     }
36 
37     @Override
38     // 默认使用pageable作为缓存对象的key,如key = "#pageable"
39     // 这里修改为每页显示多少条作为缓存的key,如果改变从数据库查询。
40     @Cacheable(value = "users", key = "#pageable.pageSize")
41     public Page<Users> findUserByPage(Pageable pageable) {
42         return this.usersRepository.findAll(pageable);
43     }
44 
45     @Override
46     public void saveUers(Users users) {
47         this.usersRepository.save(users);
48     }
49 
50 }

测试代码,如下所示:

 1 package com.bie.springboot.springbootredis;
 2 
 3 import com.bie.springboot.SpringbootRedisApplication;
 4 import com.bie.springboot.service.UsersService;
 5 import org.junit.jupiter.api.Test;
 6 import org.junit.runner.RunWith;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.boot.test.context.SpringBootTest;
 9 import org.springframework.data.domain.PageRequest;
10 import org.springframework.data.domain.Sort;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12 
13 import java.util.ArrayList;
14 import java.util.List;
15 
16 @RunWith(SpringJUnit4ClassRunner.class)
17 @SpringBootTest(classes = SpringbootRedisApplication.class)
18 class SpringbootRedisApplicationTests {
19 
20     @Autowired
21     private UsersService usersService;
22 
23     @Test
24     public void testFindUserById() {
25         //第一次查询
26         System.out.println("-------------------------------------" + this.usersService.findUsersById(1));
27         //第二次查询
28         System.out.println("-------------------------------------" + this.usersService.findUsersById(1));
29     }
30 
31     @Test
32     public void testFindUserByPage() {
33         Sort.Order order1 = new Sort.Order(Sort.Direction.ASC, "id");
34         Sort.Order order2 = new Sort.Order(Sort.Direction.DESC, "age");
35         List<Sort.Order> list = new ArrayList<>();
36         list.add(order1);
37         list.add(order2);
38         Sort sort = Sort.by(list);
39         int page = 0;
40         int pageSize = 20;
41         PageRequest pageRequest = PageRequest.of(page, pageSize, sort);
42         // PageRequest pageRequest2 = PageRequest.of(page, pageSize, Sort.by(list));
43         // PageRequest pageRequest3 = PageRequest.of(page, pageSize, Sort.by(order1, order2));
44         // Page<Users> userByPage = this.usersService.findUserByPage(pageRequest);
45 
46         // 第一次查询
47         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
48         // 第二次查询,第一次查询将对象的key放到缓存中,第二次根据这个key直接缓存中查询。
49         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
50 
51         // 第三次查询,此时传递的pageRequest对象改变了,不走缓存了,从数据库查询。
52         pageRequest = PageRequest.of(1, 20, sort);
53         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
54     }
55 
56 }

@CacheEvict作用:清除缓存。如何使用呢,可以这样使用,如果执行插入操作了,你再次执行做了缓存的查询操作,那么操作查询是从缓存中查询的,就造成了数据不一致状况,那么需要插入操作之后进行清空缓存,再进行查询即可。

使用效果如下所示:

 1 package com.bie.springboot.service.impl;
 2 
 3 import com.bie.springboot.dao.UsersRepository;
 4 import com.bie.springboot.po.Users;
 5 import com.bie.springboot.service.UsersService;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.cache.annotation.CacheEvict;
 8 import org.springframework.cache.annotation.Cacheable;
 9 import org.springframework.data.domain.Example;
10 import org.springframework.data.domain.Page;
11 import org.springframework.data.domain.Pageable;
12 import org.springframework.stereotype.Service;
13 
14 import java.util.List;
15 
16 @Service
17 public class UsersServiceImpl implements UsersService {
18 
19     // 注入usersRepository
20     @Autowired
21     private UsersRepository usersRepository;
22 
23     @Override
24     @Cacheable(value = "users")
25     public List<Users> findUserAll() {
26         return this.usersRepository.findAll();
27     }
28 
29     @Override
30     //@Cacheable:对当前查询的对象做缓存处理,value的值是自定义缓存策略的名称
31     @Cacheable(value = "users")
32     public Users findUsersById(Integer id) {
33         Users users = new Users();
34         users.setId(id);
35         Example<Users> example = Example.of(users);
36         return this.usersRepository.findOne(example).get();
37     }
38 
39     @Override
40     // 默认使用pageable作为缓存对象的key,如key = "#pageable"
41     // 这里修改为每页显示多少条作为缓存的key,如果改变从数据库查询。
42     @Cacheable(value = "users", key = "#pageable.pageSize")
43     public Page<Users> findUserByPage(Pageable pageable) {
44         return this.usersRepository.findAll(pageable);
45     }
46 
47     @Override
48     // @CacheEvict(value="users",allEntries=true)清除缓存中以users缓存策略缓存的对象。
49     @CacheEvict(value = "users", allEntries = true)
50     public void saveUers(Users users) {
51         this.usersRepository.save(users);
52     }
53 
54 }

测试代码,如下所示:

 1 package com.bie.springboot.springbootredis;
 2 
 3 import com.bie.springboot.SpringbootRedisApplication;
 4 import com.bie.springboot.po.Users;
 5 import com.bie.springboot.service.UsersService;
 6 import org.junit.jupiter.api.Test;
 7 import org.junit.runner.RunWith;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 import org.springframework.boot.test.context.SpringBootTest;
10 import org.springframework.data.domain.PageRequest;
11 import org.springframework.data.domain.Sort;
12 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13 
14 import java.util.ArrayList;
15 import java.util.List;
16 
17 @RunWith(SpringJUnit4ClassRunner.class)
18 @SpringBootTest(classes = SpringbootRedisApplication.class)
19 class SpringbootRedisApplicationTests {
20 
21     @Autowired
22     private UsersService usersService;
23 
24     @Test
25     public void testFindUserById() {
26         //第一次查询
27         System.out.println("-------------------------------------" + this.usersService.findUsersById(1));
28         //第二次查询
29         System.out.println("-------------------------------------" + this.usersService.findUsersById(1));
30     }
31 
32     @Test
33     public void testFindUserByPage() {
34         Sort.Order order1 = new Sort.Order(Sort.Direction.ASC, "id");
35         Sort.Order order2 = new Sort.Order(Sort.Direction.DESC, "age");
36         List<Sort.Order> list = new ArrayList<>();
37         list.add(order1);
38         list.add(order2);
39         Sort sort = Sort.by(list);
40         int page = 0;
41         int pageSize = 20;
42         PageRequest pageRequest = PageRequest.of(page, pageSize, sort);
43         // PageRequest pageRequest2 = PageRequest.of(page, pageSize, Sort.by(list));
44         // PageRequest pageRequest3 = PageRequest.of(page, pageSize, Sort.by(order1, order2));
45         // Page<Users> userByPage = this.usersService.findUserByPage(pageRequest);
46 
47         // 第一次查询
48         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
49         // 第二次查询,第一次查询将对象的key放到缓存中,第二次根据这个key直接缓存中查询。
50         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
51 
52         // 第三次查询,此时传递的pageRequest对象改变了,不走缓存了,从数据库查询。
53         pageRequest = PageRequest.of(1, 20, sort);
54         System.out.println(this.usersService.findUserByPage(pageRequest).getTotalElements());
55     }
56 
57     @Test
58     public void testSaveUsers() {
59         // 第一次查询
60         System.out.println(this.usersService.findUserAll().size());
61         Users users = new Users();
62         users.setName("哈哈哈");
63         users.setAge(24);
64         this.usersService.saveUers(users);
65         // 第二次查询
66         System.out.println(this.usersService.findUserAll().size());
67     }
68 
69 }

 

posted on 2020-05-16 21:17  别先生  阅读(2067)  评论(0编辑  收藏  举报