1.使用缓存减轻数据库的压力, 承受高的并发量
2.验证码三分钟有效, 把这些临时的数据放在缓存中
JSR-107
为了规定缓存的规范 ,javaee发布的jsr-107
Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和Expiry。
•CachingProvider(缓存提供者): 定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。
•CacheManager :定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager :仅被一个CachingProvider所拥有。
•Cache :是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
•Entry :是一个存储在Cache中的key-value对。
•Expiry :每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。
用户使用缓存,可以通过cacheprovider 获取到cachemanager
整个交互应该是这样的
spring 的缓存抽象
使用jsr107 开发难度还是挺大的,spring从3.1开始定义了Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;
•Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
•Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ConcurrentMapCache等;
•每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。
•使用Spring缓存抽象时我们需要关注以下两点;
1、确定方法需要被缓存以及他们的缓存策略
2、从缓存中读取之前缓存存储的数据
Cache |
缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等 |
CacheManager |
缓存管理器,管理各种缓存(Cache)组件 |
@Cacheable |
主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 (get) |
@CacheEvict |
清空缓存 (delete) |
@CachePut |
保证方法被调用,又希望结果被缓存。(update) |
@EnableCaching |
开启基于注解的缓存 |
keyGenerator |
缓存数据时key生成策略
|
HelloWorld
我们写一个正常的没有缓存的程序, 也就是说每次请求查询一次数据库
Mapper
-
package com.zzq.springboot01cache.mapper;
-
-
import com.zzq.springboot01cache.entity.Employee;
-
import org.apache.ibatis.annotations.*;
-
-
-
public interface EmployeeMapper {
-
-
-
public Employee getEmpById(Integer id);
-
-
-
public void updateEmp(Employee employee);
-
-
-
public void deleteEmpById(Integer id);
-
-
-
public void insertEmployee(Employee employee);
-
-
-
Employee getEmpByLastName(String lastName);
-
}
Service
-
public Employee getEmployeeById(Integer id){
-
System.out.println(“查询员工”+id);
-
return employeeMapper.getEmpById(id);
-
}
Controller
-
-
public Employee getEmpById(
-
return employeeService.getEmployeeById(id);
-
}
这样的话我们每次请求都会查询一次数据库,在service 中写的打印语句也就会被打印,下面我们使用缓存
1.在springbootapplication启动类上加上开启缓存的注解
@EnableCaching
-
-
-
-
public class Springboot01CacheApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(Springboot01CacheApplication.class, args);
-
}
-
}
2.在我们需要缓存的方法上加上对应的注解, 具体加什么注解, 看上面的截图
-
-
public Employee getEmployeeById(Integer id){
-
System.out.println(“查询员工”+id);
-
return employeeMapper.getEmpById(id);
-
}
这个时候就会发现,只会打印输出语句一次,
一个springboot 的缓存简单的缓存机制就完成了
springboot 缓存原理
凡是springboot 的东西我们就看自动配置,xxxautoconfigruaction
CacheAutoConfiguration
上面标注了这么多东西
@configuration 标注配置类
@ConditionalOnClass 当容器中有CacheManager 的时候
@ConditionalOnBean 当容器中有CacheAspectSupport这个组件的时候
@ConditionalOnMissingBean 容器中没有名字是cacheResolver 的CacheManager 这个类型的类的时候
@EnacbleConfigurationProperties 自动装配注解,
@autoConfigureBefore 在这个类开始只配置之前发生的配置类
@autoConfigureAfter 在这个类配置之后发生的事情
@Import 导入CacheConfigurationImportSlector 这个类
CacheConfigurationImportSlector
-
*/
-
static class CacheConfigurationImportSelector implements ImportSelector {
-
-
-
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
-
CacheType[] types = CacheType.values();
-
String[] imports = new String[types.length];
-
for (int i = 0; i < types.length; i++) {
-
imports[i] = CacheConfigurations.getConfigurationClass(types[i]);
-
}
-
return imports;
-
}
-
-
}
看源码这是一个内部类最终返回了所有的导入的组件 我们debug 看下
org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
导入了10个CacheConfiguration 导入10 中缓存的配置,说明springboot 会自动的配置这10 中缓存
下面我们就看下他默认使用的是什么缓存
吧springboot 调成debug 模式,这样就可以显示在启动的时候自动配置类的情况
我们看日志
-
============================
-
CONDITIONS EVALUATION REPORT
-
============================
-
-
积极的匹配
-
Positive matches:
-
—————–
-
-
CacheAutoConfiguration matched:
-
–
-
– @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) found bean ‘cacheInterceptor’;
-
-
CacheAutoConfiguration#cacheManagerCustomizers matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.cache.CacheManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
CodecsAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.codec.CodecConfigurer’;
-
-
CodecsAutoConfiguration.JacksonCodecConfiguration matched:
-
– @ConditionalOnClass found required class ‘com.fasterxml.jackson.databind.ObjectMapper’;
-
-
CodecsAutoConfiguration.JacksonCodecConfiguration#jacksonCodecCustomizer matched:
-
– @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean ‘jacksonObjectMapper’ (OnBeanCondition)
-
-
DataSourceAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.sql.DataSource’, ‘org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType’;
-
-
DataSourceAutoConfiguration.PooledDataSourceConfiguration matched:
-
– AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType
-
–
-
-
DataSourceConfiguration.Hikari matched:
-
– @ConditionalOnClass found required class ‘com.zaxxer.hikari.HikariDataSource’;
-
– @ConditionalOnProperty (spring.datasource.type=com.zaxxer.hikari.HikariDataSource) matched (OnPropertyCondition)
-
– @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
DataSourceJmxConfiguration matched:
-
– @ConditionalOnProperty (spring.jmx.enabled=true) matched (OnPropertyCondition)
-
-
DataSourceJmxConfiguration.Hikari matched:
-
– @ConditionalOnClass found required class ‘com.zaxxer.hikari.HikariDataSource’;
-
– @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans ‘dataSource’ (OnBeanCondition)
-
-
DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration matched:
-
– @ConditionalOnClass found required class ‘com.zaxxer.hikari.HikariDataSource’;
-
-
DataSourceTransactionManagerAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘org.springframework.jdbc.core.JdbcTemplate’, ‘org.springframework.transaction.PlatformTransactionManager’;
-
-
DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration matched:
-
– @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans ‘dataSource’ (OnBeanCondition)
-
-
DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration#transactionManager matched:
-
– @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
DevToolsDataSourceAutoConfiguration matched:
-
– DevTools DataSource Condition found auto-configured DataSource (DevToolsDataSourceAutoConfiguration.DevToolsDataSourceCondition)
-
-
DispatcherServletAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.web.servlet.DispatcherServlet’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
-
DispatcherServletAutoConfiguration.DispatcherServletConfiguration matched:
-
– @ConditionalOnClass found required class ‘javax.servlet.ServletRegistration’;
-
– Default DispatcherServlet did not find dispatcher servlet beans (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
-
-
DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration matched:
-
– @ConditionalOnClass found required class ‘javax.servlet.ServletRegistration’;
-
– DispatcherServlet Registration did not find servlet registration bean (DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition)
-
-
DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistration matched:
-
– @ConditionalOnBean (names: dispatcherServlet; types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean ‘dispatcherServlet’ (OnBeanCondition)
-
-
EmbeddedWebServerFactoryCustomizerAutoConfiguration.TomcatWebServerFactoryCustomizerConfiguration matched:
-
– @ConditionalOnClass found required classes ‘org.apache.catalina.startup.Tomcat’, ‘org.apache.coyote.UpgradeProtocol’;
-
-
ErrorMvcAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘org.springframework.web.servlet.DispatcherServlet’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
-
ErrorMvcAutoConfiguration#basicErrorController matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorController; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
ErrorMvcAutoConfiguration#errorAttributes matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorAttributes; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
ErrorMvcAutoConfiguration.DefaultErrorViewResolverConfiguration#conventionErrorViewResolver matched:
-
– @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean ‘dispatcherServlet’;
-
-
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched:
-
– @ConditionalOnProperty (server.error.whitelabel.enabled) matched (OnPropertyCondition)
-
– ErrorTemplate Missing did not find error template view (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition)
-
-
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolver matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorView matched:
-
– @ConditionalOnMissingBean (names: error; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
HttpEncodingAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.web.filter.CharacterEncodingFilter’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
– @ConditionalOnProperty (spring.http.encoding.enabled) matched (OnPropertyCondition)
-
-
HttpEncodingAutoConfiguration#characterEncodingFilter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
HttpMessageConvertersAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.converter.HttpMessageConverter’;
-
-
HttpMessageConvertersAutoConfiguration#messageConverters matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.http.HttpMessageConverters; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.converter.StringHttpMessageConverter’;
-
-
HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConverter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JacksonAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘com.fasterxml.jackson.databind.ObjectMapper’;
-
-
JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.converter.json.Jackson2ObjectMapperBuilder’;
-
-
JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.converter.json.Jackson2ObjectMapperBuilder’;
-
-
JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuilder matched:
-
– @ConditionalOnMissingBean (types: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.converter.json.Jackson2ObjectMapperBuilder’;
-
-
JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper matched:
-
– @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JacksonAutoConfiguration.ParameterNamesModuleConfiguration matched:
-
– @ConditionalOnClass found required class ‘com.fasterxml.jackson.module.paramnames.ParameterNamesModule’;
-
-
JacksonAutoConfiguration.ParameterNamesModuleConfiguration#parameterNamesModule matched:
-
– @ConditionalOnMissingBean (types: com.fasterxml.jackson.module.paramnames.ParameterNamesModule; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration matched:
-
– @ConditionalOnClass found required class ‘com.fasterxml.jackson.databind.ObjectMapper’;
-
– @ConditionalOnProperty (spring.http.converters.preferred-json-mapper=jackson) matched (OnPropertyCondition)
-
– @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean ‘jacksonObjectMapper’ (OnBeanCondition)
-
-
JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JdbcTemplateAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.sql.DataSource’, ‘org.springframework.jdbc.core.JdbcTemplate’;
-
– @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans ‘dataSource’ (OnBeanCondition)
-
-
JdbcTemplateAutoConfiguration.JdbcTemplateConfiguration#jdbcTemplate matched:
-
– @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JdbcTemplateAutoConfiguration.NamedParameterJdbcTemplateConfiguration#namedParameterJdbcTemplate matched:
-
– @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.JdbcTemplate; SearchStrategy: all) found a primary bean from beans ‘jdbcTemplate’;
-
-
JmxAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.jmx.export.MBeanExporter’;
-
– @ConditionalOnProperty (spring.jmx.enabled=true) matched (OnPropertyCondition)
-
-
JmxAutoConfiguration#mbeanExporter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.jmx.export.MBeanExporter; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
JmxAutoConfiguration#mbeanServer matched:
-
– @ConditionalOnMissingBean (types: javax.management.MBeanServer; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
JmxAutoConfiguration#objectNamingStrategy matched:
-
– @ConditionalOnMissingBean (types: org.springframework.jmx.export.naming.ObjectNamingStrategy; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
LocalDevToolsAutoConfiguration matched:
-
– Initialized Restarter Condition available and initialized (OnInitializedRestarterCondition)
-
-
LocalDevToolsAutoConfiguration.LiveReloadConfiguration matched:
-
– @ConditionalOnProperty (spring.devtools.livereload.enabled) matched (OnPropertyCondition)
-
-
LocalDevToolsAutoConfiguration.LiveReloadConfiguration#liveReloadServer matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.devtools.livereload.LiveReloadServer; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
LocalDevToolsAutoConfiguration.RestartConfiguration matched:
-
– @ConditionalOnProperty (spring.devtools.restart.enabled) matched (OnPropertyCondition)
-
-
LocalDevToolsAutoConfiguration.RestartConfiguration#classPathFileSystemWatcher matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.devtools.classpath.ClassPathFileSystemWatcher; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
LocalDevToolsAutoConfiguration.RestartConfiguration#classPathRestartStrategy matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.devtools.classpath.ClassPathRestartStrategy; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
LocalDevToolsAutoConfiguration.RestartConfiguration#conditionEvaluationDeltaLoggingListener matched:
-
– @ConditionalOnProperty (spring.devtools.restart.log-condition-evaluation-delta) matched (OnPropertyCondition)
-
-
MultipartAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘org.springframework.web.multipart.support.StandardServletMultipartResolver’, ‘javax.servlet.MultipartConfigElement’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
– @ConditionalOnProperty (spring.servlet.multipart.enabled) matched (OnPropertyCondition)
-
-
MultipartAutoConfiguration#multipartConfigElement matched:
-
– @ConditionalOnMissingBean (types: javax.servlet.MultipartConfigElement,org.springframework.web.multipart.commons.CommonsMultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
MultipartAutoConfiguration#multipartResolver matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
MybatisAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘org.apache.ibatis.session.SqlSessionFactory’, ‘org.mybatis.spring.SqlSessionFactoryBean’;
-
– @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found bean ‘dataSource’ (OnBeanCondition)
-
-
MybatisAutoConfiguration#sqlSessionFactory matched:
-
– @ConditionalOnMissingBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
MybatisAutoConfiguration#sqlSessionTemplate matched:
-
– @ConditionalOnMissingBean (types: org.mybatis.spring.SqlSessionTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
PersistenceExceptionTranslationAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor’;
-
-
PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor matched:
-
– @ConditionalOnProperty (spring.dao.exceptiontranslation.enabled) matched (OnPropertyCondition)
-
– @ConditionalOnMissingBean (types: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched:
-
– @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
RestTemplateAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.web.client.RestTemplate’;
-
-
RestTemplateAutoConfiguration#restTemplateBuilder matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
ServletWebServerFactoryAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘javax.servlet.ServletRequest’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
-
ServletWebServerFactoryAutoConfiguration#tomcatServletWebServerFactoryCustomizer matched:
-
– @ConditionalOnClass found required class ‘org.apache.catalina.startup.Tomcat’;
-
-
ServletWebServerFactoryConfiguration.EmbeddedTomcat matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘org.apache.catalina.startup.Tomcat’, ‘org.apache.coyote.UpgradeProtocol’;
-
– @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.server.ServletWebServerFactory; SearchStrategy: current) did not find any beans (OnBeanCondition)
-
-
SimpleCacheConfiguration matched:
-
– Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition)
-
– @ConditionalOnMissingBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
SpringApplicationAdminJmxAutoConfiguration matched:
-
– @ConditionalOnProperty (spring.application.admin.enabled=true) matched (OnPropertyCondition)
-
-
SpringApplicationAdminJmxAutoConfiguration#springApplicationAdminRegistrar matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
TransactionAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘org.springframework.transaction.PlatformTransactionManager’;
-
-
TransactionAutoConfiguration#platformTransactionManagerCustomizers matched:
-
– @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
TransactionAutoConfiguration.EnableTransactionManagementConfiguration matched:
-
– @ConditionalOnBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found bean ‘transactionManager’;
-
-
TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration matched:
-
– @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
-
-
TransactionAutoConfiguration.TransactionTemplateConfiguration matched:
-
– @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a primary bean from beans ‘transactionManager’ (OnBeanCondition)
-
-
TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched:
-
– @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
ValidationAutoConfiguration matched:
-
– @ConditionalOnClass found required class ‘javax.validation.executable.ExecutableValidator’;
-
– @ConditionalOnResource found location classpath:META-INF/services/javax.validation.spi.ValidationProvider (OnResourceCondition)
-
-
ValidationAutoConfiguration#defaultValidator matched:
-
– @ConditionalOnMissingBean (types: javax.validation.Validator; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
ValidationAutoConfiguration#methodValidationPostProcessor matched:
-
– @ConditionalOnMissingBean (types: org.springframework.validation.beanvalidation.MethodValidationPostProcessor; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘org.springframework.web.servlet.DispatcherServlet’, ‘org.springframework.web.servlet.config.annotation.WebMvcConfigurer’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
– @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration#hiddenHttpMethodFilter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration#httpPutFormContentFilter matched:
-
– @ConditionalOnProperty (spring.mvc.formcontent.putfilter.enabled) matched (OnPropertyCondition)
-
– @ConditionalOnMissingBean (types: org.springframework.web.filter.HttpPutFormContentFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFilter matched:
-
– @ConditionalOnMissingBean (types: org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver matched:
-
– @ConditionalOnBean (types: org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found beans ‘defaultViewResolver’, ‘beanNameViewResolver’, ‘mvcViewResolver’;
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.FaviconConfiguration matched:
-
– @ConditionalOnProperty (spring.mvc.favicon.enabled) matched (OnPropertyCondition)
-
-
WebSocketServletAutoConfiguration matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘javax.websocket.server.ServerContainer’;
-
– found ConfigurableWebEnvironment (OnWebApplicationCondition)
-
-
WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration matched:
-
– @ConditionalOnClass found required classes ‘org.apache.catalina.startup.Tomcat’, ‘org.apache.tomcat.websocket.server.WsSci’;
-
-
WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration#websocketContainerCustomizer matched:
-
– @ConditionalOnMissingBean (names: websocketServletWebServerCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
-
-
消极的匹配
-
Negative matches:
-
—————–
-
-
ActiveMQAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘javax.jms.ConnectionFactory’, ‘org.apache.activemq.ActiveMQConnectionFactory’ (OnClassCondition)
-
-
AopAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.aspectj.lang.annotation.Aspect’, ‘org.aspectj.lang.reflect.Advice’, ‘org.aspectj.weaver.AnnotatedElement’ (OnClassCondition)
-
-
ArtemisAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘javax.jms.ConnectionFactory’, ‘org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory’ (OnClassCondition)
-
-
BatchAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.batch.core.launch.JobLauncher’ (OnClassCondition)
-
-
CacheAutoConfiguration.CacheManagerJpaDependencyConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
CaffeineCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.github.benmanes.caffeine.cache.Caffeine’ (OnClassCondition)
-
-
CassandraAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.datastax.driver.core.Cluster’ (OnClassCondition)
-
-
CassandraDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Cluster’, ‘org.springframework.data.cassandra.core.CassandraAdminOperations’ (OnClassCondition)
-
-
CassandraReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Cluster’, ‘org.springframework.data.cassandra.core.ReactiveCassandraTemplate’, ‘reactor.core.publisher.Flux’ (OnClassCondition)
-
-
CassandraReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.data.cassandra.ReactiveSession’, ‘org.springframework.data.cassandra.repository.ReactiveCassandraRepository’ (OnClassCondition)
-
-
CassandraRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Session’, ‘org.springframework.data.cassandra.repository.CassandraRepository’ (OnClassCondition)
-
-
CloudAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.cloud.config.java.CloudScanConfiguration’ (OnClassCondition)
-
-
CouchbaseAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.CouchbaseBucket’, ‘com.couchbase.client.java.Cluster’ (OnClassCondition)
-
-
CouchbaseCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘com.couchbase.client.spring.cache.CouchbaseCacheManager’ (OnClassCondition)
-
-
CouchbaseDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.CouchbaseRepository’ (OnClassCondition)
-
-
CouchbaseReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.ReactiveCouchbaseRepository’, ‘reactor.core.publisher.Flux’ (OnClassCondition)
-
-
CouchbaseReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.ReactiveCouchbaseRepository’, ‘reactor.core.publisher.Flux’ (OnClassCondition)
-
-
CouchbaseRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.CouchbaseRepository’ (OnClassCondition)
-
-
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
-
Did not match:
-
– EmbeddedDataSource found supported pooled data source (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
-
-
DataSourceConfiguration.Dbcp2:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.commons.dbcp2.BasicDataSource’ (OnClassCondition)
-
-
DataSourceConfiguration.Generic:
-
Did not match:
-
– @ConditionalOnProperty (spring.datasource.type) did not find property ‘spring.datasource.type’ (OnPropertyCondition)
-
-
DataSourceConfiguration.Tomcat:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSource’ (OnClassCondition)
-
-
DataSourceJmxConfiguration.TomcatDataSourceJmxConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSourceProxy’ (OnClassCondition)
-
-
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.commons.dbcp2.BasicDataSource’ (OnClassCondition)
-
-
DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSource’ (OnClassCondition)
-
-
DevToolsDataSourceAutoConfiguration.DatabaseShutdownExecutorJpaDependencyConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver:
-
Did not match:
-
– @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver (OnBeanCondition)
-
-
EhCacheCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘net.sf.ehcache.Cache’ (OnClassCondition)
-
-
ElasticsearchAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.client.TransportClientFactoryBean’ (OnClassCondition)
-
-
ElasticsearchDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.core.ElasticsearchTemplate’ (OnClassCondition)
-
-
ElasticsearchRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.repository.ElasticsearchRepository’ (OnClassCondition)
-
-
EmbeddedLdapAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.unboundid.ldap.listener.InMemoryDirectoryServer’ (OnClassCondition)
-
-
EmbeddedMongoAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘de.flapdoodle.embed.mongo.MongodStarter’ (OnClassCondition)
-
-
EmbeddedWebServerFactoryCustomizerAutoConfiguration.JettyWebServerFactoryCustomizerConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.eclipse.jetty.server.Server’, ‘org.eclipse.jetty.util.Loader’, ‘org.eclipse.jetty.webapp.WebAppContext’ (OnClassCondition)
-
-
EmbeddedWebServerFactoryCustomizerAutoConfiguration.UndertowWebServerFactoryCustomizerConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘io.undertow.Undertow’, ‘org.xnio.SslClientAuthMode’ (OnClassCondition)
-
-
ErrorWebFluxAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.config.WebFluxConfigurer’ (OnClassCondition)
-
-
FlywayAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.flywaydb.core.Flyway’ (OnClassCondition)
-
-
FreeMarkerAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘freemarker.template.Configuration’ (OnClassCondition)
-
-
GenericCacheConfiguration:
-
Did not match:
-
– @ConditionalOnBean (types: org.springframework.cache.Cache; SearchStrategy: all) did not find any beans of type org.springframework.cache.Cache (OnBeanCondition)
-
Matched:
-
– Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition)
-
-
GroovyTemplateAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘groovy.text.markup.MarkupTemplateEngine’ (OnClassCondition)
-
-
GsonAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.google.gson.Gson’ (OnClassCondition)
-
-
GsonHttpMessageConvertersConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.google.gson.Gson’ (OnClassCondition)
-
-
H2ConsoleAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.h2.server.web.WebServlet’ (OnClassCondition)
-
-
HazelcastAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.hazelcast.core.HazelcastInstance’ (OnClassCondition)
-
-
HazelcastCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.hazelcast.core.HazelcastInstance’, ‘com.hazelcast.spring.cache.HazelcastCacheManager’ (OnClassCondition)
-
-
HazelcastJpaDependencyAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.hazelcast.core.HazelcastInstance’, ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
HibernateJpaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’, ‘javax.persistence.EntityManager’ (OnClassCondition)
-
-
HttpHandlerAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.DispatcherHandler’ (OnClassCondition)
-
-
HypermediaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.hateoas.Resource’, ‘org.springframework.plugin.core.Plugin’ (OnClassCondition)
-
-
InfinispanCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.infinispan.spring.provider.SpringEmbeddedCacheManager’ (OnClassCondition)
-
-
InfluxDbAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.influxdb.InfluxDB’ (OnClassCondition)
-
-
IntegrationAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.integration.config.EnableIntegration’ (OnClassCondition)
-
-
JCacheCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.cache.Caching’ (OnClassCondition)
-
-
JacksonAutoConfiguration.JodaDateTimeJacksonConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.joda.time.DateTime’, ‘com.fasterxml.jackson.datatype.joda.ser.DateTimeSerializer’, ‘com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat’ (OnClassCondition)
-
-
JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.fasterxml.jackson.dataformat.xml.XmlMapper’ (OnClassCondition)
-
-
JerseyAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.glassfish.jersey.server.spring.SpringComponentProvider’ (OnClassCondition)
-
-
JestAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘io.searchbox.client.JestClient’ (OnClassCondition)
-
-
JmsAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘javax.jms.Message’, ‘org.springframework.jms.core.JmsTemplate’ (OnClassCondition)
-
-
JndiConnectionFactoryAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.jms.core.JmsTemplate’ (OnClassCondition)
-
-
JndiDataSourceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.datasource.jndi-name) did not find property ‘jndi-name’ (OnPropertyCondition)
-
Matched:
-
– @ConditionalOnClass found required classes ‘javax.sql.DataSource’, ‘org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType’;
-
-
JooqAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.jooq.DSLContext’ (OnClassCondition)
-
-
JpaRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.jpa.repository.JpaRepository’ (OnClassCondition)
-
-
JsonbAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.json.bind.Jsonb’ (OnClassCondition)
-
-
JsonbHttpMessageConvertersConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.json.bind.Jsonb’ (OnClassCondition)
-
-
JtaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.transaction.Transaction’ (OnClassCondition)
-
-
KafkaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.kafka.core.KafkaTemplate’ (OnClassCondition)
-
-
LdapAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.ldap.core.ContextSource’ (OnClassCondition)
-
-
LdapDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.ldap.repository.LdapRepository’ (OnClassCondition)
-
-
LdapRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.ldap.repository.LdapRepository’ (OnClassCondition)
-
-
LiquibaseAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘liquibase.integration.spring.SpringLiquibase’, ‘liquibase.change.DatabaseChange’ (OnClassCondition)
-
-
MailSenderAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.mail.internet.MimeMessage’ (OnClassCondition)
-
-
MailSenderValidatorAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.mail.test-connection) did not find property ‘test-connection’ (OnPropertyCondition)
-
-
MessageSourceAutoConfiguration:
-
Did not match:
-
– ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)
-
-
MongoAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.mongodb.MongoClient’ (OnClassCondition)
-
-
MongoDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘org.springframework.data.mongodb.core.MongoTemplate’ (OnClassCondition)
-
-
MongoReactiveAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.mongodb.reactivestreams.client.MongoClient’ (OnClassCondition)
-
-
MongoReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.reactivestreams.client.MongoClient’, ‘org.springframework.data.mongodb.core.ReactiveMongoTemplate’ (OnClassCondition)
-
-
MongoReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.reactivestreams.client.MongoClient’, ‘org.springframework.data.mongodb.repository.ReactiveMongoRepository’ (OnClassCondition)
-
-
MongoRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘org.springframework.data.mongodb.repository.MongoRepository’ (OnClassCondition)
-
-
MustacheAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.samskivert.mustache.Mustache’ (OnClassCondition)
-
-
MybatisAutoConfiguration.MapperScannerRegistrarNotFoundConfiguration:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.mybatis.spring.mapper.MapperFactoryBean; SearchStrategy: all) found beans of type ‘org.mybatis.spring.mapper.MapperFactoryBean’ &departmentMapper, &employeeMapper (OnBeanCondition)
-
-
Neo4jDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.neo4j.ogm.session.SessionFactory’, ‘org.springframework.data.neo4j.transaction.Neo4jTransactionManager’ (OnClassCondition)
-
-
Neo4jRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.neo4j.ogm.session.Neo4jSession’, ‘org.springframework.data.neo4j.repository.Neo4jRepository’ (OnClassCondition)
-
-
NoOpCacheConfiguration:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found beans of type ‘org.springframework.cache.CacheManager’ cacheManager (OnBeanCondition)
-
Matched:
-
– Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition)
-
-
OAuth2ClientAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.security.config.annotation.web.configuration.EnableWebSecurity’, ‘org.springframework.security.oauth2.client.registration.ClientRegistration’ (OnClassCondition)
-
-
ProjectInfoAutoConfiguration#buildProperties:
-
Did not match:
-
– @ConditionalOnResource did not find resource ‘${spring.info.build.location:classpath:META-INF/build-info.properties}‘ (OnResourceCondition)
-
-
ProjectInfoAutoConfiguration#gitProperties:
-
Did not match:
-
– GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition)
-
-
QuartzAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.quartz.Scheduler‘ (OnClassCondition)
-
-
RabbitAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.amqp.rabbit.core.RabbitTemplate‘, ‘com.rabbitmq.client.Channel‘ (OnClassCondition)
-
-
ReactiveUserDetailsServiceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.security.authentication.ReactiveAuthenticationManager‘ (OnClassCondition)
-
-
ReactiveWebServerFactoryAutoConfiguration:
-
Did not match:
-
– not a reactive web application (OnWebApplicationCondition)
-
Matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.ReactiveHttpInputMessage‘; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
-
-
ReactorCoreAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘reactor.core.publisher.Mono‘, ‘reactor.core.publisher.Flux‘ (OnClassCondition)
-
-
RedisAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.redis.core.RedisOperations‘ (OnClassCondition)
-
-
RedisCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.redis.connection.RedisConnectionFactory‘ (OnClassCondition)
-
-
RedisReactiveAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.data.redis.connection.ReactiveRedisConnectionFactory‘, ‘org.springframework.data.redis.core.ReactiveRedisTemplate‘, ‘reactor.core.publisher.Flux‘ (OnClassCondition)
-
-
RedisRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.redis.repository.configuration.EnableRedisRepositories‘ (OnClassCondition)
-
-
RemoteDevToolsAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.devtools.remote.secret) did not find property ‘secret‘ (OnPropertyCondition)
-
Matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Filter‘, ‘org.springframework.http.server.ServerHttpRequest‘; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
-
-
RepositoryRestMvcAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration‘ (OnClassCondition)
-
-
SecurityAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.security.authentication.DefaultAuthenticationEventPublisher‘ (OnClassCondition)
-
-
SecurityFilterAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer‘, ‘org.springframework.security.config.http.SessionCreationPolicy‘ (OnClassCondition)
-
-
SendGridAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.sendgrid.SendGrid‘ (OnClassCondition)
-
-
ServletWebServerFactoryConfiguration.EmbeddedJetty:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.eclipse.jetty.server.Server‘, ‘org.eclipse.jetty.util.Loader‘, ‘org.eclipse.jetty.webapp.WebAppContext‘ (OnClassCondition)
-
-
ServletWebServerFactoryConfiguration.EmbeddedUndertow:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘io.undertow.Undertow‘, ‘org.xnio.SslClientAuthMode‘ (OnClassCondition)
-
-
SessionAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.session.Session‘ (OnClassCondition)
-
-
SolrAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.apache.solr.client.solrj.impl.HttpSolrClient‘, ‘org.apache.solr.client.solrj.impl.CloudSolrClient‘ (OnClassCondition)
-
-
SolrRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.apache.solr.client.solrj.SolrClient‘, ‘org.springframework.data.solr.repository.SolrRepository‘ (OnClassCondition)
-
-
SpringDataWebAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.web.PageableHandlerMethodArgumentResolver‘ (OnClassCondition)
-
-
ThymeleafAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.thymeleaf.templatemode.TemplateMode‘ (OnClassCondition)
-
-
TransactionAutoConfiguration.EnableTransactionManagementConfiguration.JdkDynamicAutoProxyConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.aop.proxy-target-class=false) did not find property ‘proxy-target-class’ (OnPropertyCondition)
-
-
UserDetailsServiceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.security.authentication.AuthenticationManager’ (OnClassCondition)
-
-
WebClientAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.function.client.WebClient’ (OnClassCondition)
-
-
WebFluxAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.config.WebFluxConfigurer’ (OnClassCondition)
-
-
WebFluxSecurityConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity’, ‘org.springframework.security.web.server.WebFilterChainProxy’ (OnClassCondition)
-
-
WebMvcAutoConfiguration.ResourceChainCustomizerConfiguration:
-
Did not match:
-
– @ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarAssetLocator (OnEnabledResourceChainCondition)
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found beans of type ‘org.springframework.web.servlet.view.BeanNameViewResolver’ beanNameViewResolver (OnBeanCondition)
-
-
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#localeResolver:
-
Did not match:
-
–
-
-
WebServicesAutoConfiguration:
-
Did not match:
-
–
-
-
WebSocketMessagingAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer’ (OnClassCondition)
-
-
WebSocketReactiveAutoConfiguration:
-
Did not match:
-
– not a reactive web application (OnWebApplicationCondition)
-
Matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Servlet’, ‘javax.websocket.server.ServerContainer’;
-
-
WebSocketServletAutoConfiguration.JettyWebSocketConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer’ (OnClassCondition)
-
-
WebSocketServletAutoConfiguration.UndertowWebSocketConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘io.undertow.websockets.jsr.Bootstrap’ (OnClassCondition)
-
-
XADataSourceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.transaction.TransactionManager’ (OnClassCondition)
-
-
-
Exclusions:
-
———–
-
-
None
-
-
-
Unconditional classes:
-
———————-
-
-
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
-
-
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration
-
-
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration
-
-
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
-
-
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
-
-
-
-
2018-09-08 00:35:23.579 INFO 15880 — [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ”
-
2018-09-08 00:35:23.581 INFO 15880 — [ restartedMain] c.z.s.Springboot01CacheApplication : Started Springboot01CacheApplication in 1.977 seconds (JVM running for 2.532)
-
2018-09-08 00:35:23.583 DEBUG 15880 — [ restartedMain] o.s.boot.devtools.restart.Restarter : Creating new Restarter for thread Thread[main,5,main]
-
2018-09-08 00:35:23.583 DEBUG 15880 — [ restartedMain] o.s.boot.devtools.restart.Restarter : Immediately restarting application
-
2018-09-08 00:35:23.583 DEBUG 15880 — [ restartedMain] o.s.boot.devtools.restart.Restarter : Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@55ef7dd3
-
2018-09-08 00:35:23.583 DEBUG 15880 — [ restartedMain] o.s.boot.devtools.restart.Restarter : Starting application com.zzq.springboot01cache.Springboot01CacheApplication with URLs [file:/D:/springboot%e9%ab%98%e7%ba%a7/springboot-01-cache/target/classes/]
-
我们发现就只有一个缓存配置是注册进去了, 也就是说会产生一个缓存管理器
我们看下
SimpleCacheConfiguration
-
-
public ConcurrentMapCacheManager cacheManager() {
-
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager();
-
List<String> cacheNames = this.cacheProperties.getCacheNames();
-
if (!cacheNames.isEmpty()) {
-
cacheManager.setCacheNames(cacheNames);
-
}
-
return this.customizerInvoker.customize(cacheManager);
-
}
向容器中放入要给ConcurrentMapCacheManager 这个缓存管理器
ConcurrentMapCacheManger
从名字就能看出来,底层一定使用的是ConcurrentMap
-
-
public ConcurrentMapCacheManager cacheManager() {
-
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager();
-
List<String> cacheNames = this.cacheProperties.getCacheNames();
-
if (!cacheNames.isEmpty()) {
-
cacheManager.setCacheNames(cacheNames);
-
}
-
return this.customizerInvoker.customize(cacheManager);
-
}
//设置缓存组件的名字
-
-
-
public Cache getCache(String name) {
-
Cache cache = this.cacheMap.get(name);
-
if (cache == null && this.dynamic) {
-
synchronized (this.cacheMap) {
-
cache = this.cacheMap.get(name);
-
if (cache == null) {
-
cache = createConcurrentMapCache(name);
-
this.cacheMap.put(name, cache);
-
}
-
}
-
}
-
return cache;
-
}
通过名字获取缓存组件,如果是null 的话, 然后就用同步代码块进行尝试,如果还是没有得到, 就直接创建一个cache
-
protected Cache createConcurrentMapCache(String name) {
-
SerializationDelegate actualSerialization = (isStoreByValue() ? this.serialization : null);
-
return new ConcurrentMapCache(name, new ConcurrentHashMap<>(256),
-
isAllowNullValues(), actualSerialization);
-
-
}
-
protected ConcurrentMapCache(String name, ConcurrentMap<Object, Object> store,
-
boolean allowNullValues,
-
-
super(allowNullValues);
-
Assert.notNull(name, “Name must not be null”);
-
Assert.notNull(store, “Store must not be null”);
-
this.name = name;
-
this.store = store;
-
this.serialization = serialization;
-
}
private final ConcurrentMap<Object, Object> store;
创建一个concurrentHashMap 集合进行缓存数据
运行流程
@Cacheable 向缓存中存数据
* cacheNames/value:指定缓存组件的名字;将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存;
*
* key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值 1-方法的返回值
* 编写SpEL; #i d;参数id的值 #a0 #p0 #root.args[0]
* getEmp[2]
*
* keyGenerator:key的生成器;可以自己指定key的生成器的组件id
* key/keyGenerator:二选一使用;
*
*
* cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器
*
* condition:指定符合条件的情况下才缓存;
* ,condition = “#id>0”
* condition = “#a0>1″:第一个参数的值》1的时候才进行缓存
*
* unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;可以获取到结果进行判断
* unless = “#result == null”
* unless = “#a0==2”:如果第一个参数的值是2,结果不缓存;
* sync:是否使用异步模式
名字 |
位置 |
描述 |
示例 |
methodName |
root object |
当前被调用的方法名 |
#root.methodName |
method |
root object |
当前被调用的方法 |
#root.method.name |
target |
root object |
当前被调用的目标对象 |
#root.target |
targetClass |
root object |
当前被调用的目标对象类 |
#root.targetClass |
args |
root object |
当前被调用的方法的参数列表 |
#root.args[0] |
caches |
root object |
当前方法调用使用的缓存列表(如@Cacheable(value={“cache1”, “cache2”})),则有两个cache |
#root.caches[0].name |
argument name |
evaluation context |
方法参数的名字. 可以直接 #参数名 ,也可以使用 #p0或#a0 的形式,0代表参数的索引; |
#iban 、 #a0 、 #p0 |
result |
evaluation context |
方法执行后的返回值(仅当方法执行之后的判断有效,如‘unless’,’cache put’的表达式 ’cache evict’的表达式beforeInvocation=false) |
#result |
@Cacheput 修改数据库中的某个数据,同时更新缓存
-
/**
-
* 更新
-
*/
-
-
public Employee updateEmp(Employee employee){
-
employeeMapper.updateEmp(employee);
-
return employee ;
-
}
-
-
public Employee updateEmp(Employee employee){
-
return employeeService.updateEmp(employee);
-
}
1.查看
第一次请求
-
2018-09-08 23:53:56.124 DEBUG 8936 — [nio-8080-exec-2] o.s.b.w.s.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@1d73467b
-
查询员工1
-
2018-09-08 23:53:56.125 INFO 8936 — [nio-8080-exec-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Starting…
-
2018-09-08 23:54:01.400 INFO 8936 — [nio-8080-exec-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Start completed.
-
2018-09-08 23:54:01.406 DEBUG 8936 — [nio-8080-exec-2] c.z.s.mapper.EmployeeMapper.getEmpById : ==> Preparing: SELECT * FROM employee WHERE id = ?
-
2018-09-08 23:54:01.416 DEBUG 8936 — [nio-8080-exec-2] c.z.s.mapper.EmployeeMapper.getEmpById : ==> Parameters: 1(Integer)
-
2018-09-08 23:54:01.798 DEBUG 8936 — [nio-8080-exec-2] c.z.s.mapper.EmployeeMapper.getEmpById : <== Total: 1
-
2018-09-08 23:54:01.833 DEBUG 8936 — [nio-8080-exec-2] o.s.b.w.s.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1d73467b
查询数据库
第二次
-
2018-09-08 23:54:40.618 DEBUG 8936 — [nio-8080-exec-4] o.s.b.w.s.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@1d73467b
-
2018-09-08 23:54:40.621 DEBUG 8936 — [nio-8080-exec-4] o.s.b.w.s.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1d73467b
没有对数据库进行操作
2.更新
-
2018-09-08 23:55:58.751 DEBUG 8936 — [nio-8080-exec-3] o.s.b.w.s.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@1d73467b
-
2018-09-08 23:55:59.890 DEBUG 8936 — [nio-8080-exec-3] c.z.s.mapper.EmployeeMapper.updateEmp : ==> Preparing: UPDATE employee SET lastName=?,email=?,gender=?,d_id=? WHERE id=?
-
2018-09-08 23:55:59.891 DEBUG 8936 — [nio-8080-exec-3] c.z.s.mapper.EmployeeMapper.updateEmp : ==> Parameters: 张ab(String), zhangsan
-
2018-09-08 23:56:04.531 DEBUG 8936 — [nio-8080-exec-3] c.z.s.mapper.EmployeeMapper.updateEmp : <== Updates: 1
-
2018-09-08 23:56:04.633 DEBUG 8936 — [nio-8080-exec-3] o.s.b.w.s.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1d73467b
更行成功,
查看
-
2018-09-08 23:57:30.997 DEBUG 8936 — [nio-8080-exec-5] o.s.b.w.s.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@1d73467b
-
2018-09-08 23:57:30.999 DEBUG 8936 — [nio-8080-exec-5] o.s.b.w.s.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1d73467b
@ CacheEvict 删除数据库的数据同时,删除缓存中的数据
-
/**
-
* 删除操作
-
* @param id
-
*/
-
-
public void deleteEmp(Integer id){
-
employeeMapper.deleteEmpById(id);
-
}
-
-
-
public void deleteEmp(
-
employeeService.deleteEmp(id);
-
}
@Caching 定义复杂缓存注解 @CacheConfig抽取这个类中的公共项
-
/**
-
* 根据名字来查询
-
*/
-
-
-
-
-
-
-
-
-
-
public Employee getEmpByName(String lastName){
-
return employeeMapper.getEmpByLastName(lastName);
-
}
-
-
-
public class EmployeeService {
Springboot 整合Redis
1.引入redis
-
<!– https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis –>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-data-redis</artifactId>
-
</dependency>
2.配置redis 连接 在properties/yml全局配置文件中配置host port 默认port是6397
-
redis:
-
host: 192.168.24.133
-
port: 6377
使用redisTemplate 操作redis 数据库
redis 提供了redisTemplate 模板对象操作redis , 因为String类型的数据存储操作比较多,写了一个子类stringRedisTemplated类
string
-
stringStringValueOperations.set(“hello”,“a”);
-
stringStringValueOperations.append(“hello”,“b”);
list
-
stringRedisTemplate.opsForList().leftPushAll(“myList”, Arrays.asList(“A”,“b”));
-
// System.out.println(stringRedisTemplate.opsForList().leftPop(“myList”)); //从左边弹出
redis序列化对象
redis 默认是按照jdk提供的 Serializable 接口标识,序列化的,
-
super.afterPropertiesSet();
-
-
boolean defaultUsed = false;
-
-
if (defaultSerializer == null) {
-
-
defaultSerializer = new JdkSerializationRedisSerializer(
-
classLoader != null ? classLoader : this.getClass().getClassLoader());
-
}
-
-
if (enableDefaultSerializer) {
-
-
if (keySerializer == null) {
-
keySerializer = defaultSerializer;
-
defaultUsed = true;
-
}
只要我们把要要序列化的对象,实现Serializable 接口spring提供的redistemplate就会自动帮我们完成序列化
但是序列化不是只有着一种方式 ,SpringTemplate也提供了好几种序列化方式
只要我们有导入jackson 依赖,他就提供jackson2jsonRedisSerializer 这种序列化对象
我们看下redisautoconfiguraction 是如何配置默认的jskserializationredisSerializer 的
-
-
-
public RedisTemplate<Object, Object> redisTemplate(
-
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
-
RedisTemplate<Object, Object> template = new RedisTemplate<>();
-
template.setConnectionFactory(redisConnectionFactory);
-
return template;
-
}
创建了一个redisTemplate 对象,然后给他封装了redisConnectionFactory工厂 , redisTemplate 中的属性
private @Nullable RedisSerializer<?> defaultSerializer;
默认会被赋值
-
-
if (defaultSerializer == null) {
-
-
defaultSerializer = new JdkSerializationRedisSerializer(
-
classLoader != null ? classLoader : this.getClass().getClassLoader());
-
}
但是如果我们赋值进去,他就使用了我们自己定义的序列化方式
看代码
-
-
public RedisTemplate<Object, Employee> redisTemplate(
-
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
-
RedisTemplate<Object, Employee> template = new RedisTemplate<>();
-
template.setConnectionFactory(redisConnectionFactory);
-
Jackson2JsonRedisSerializer json = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
-
template.setDefaultSerializer(json);
-
return template;
-
}
这样我们来运行序列化
-
Employee emp = employeeMapper.getEmpById(1);
-
redisTemplate.opsForValue().set(“object”,emp);
-
Object object = redisTemplate.opsForValue().get(“object”);
-
System.out.println(object);
employee对象就被一json的方式序列化了
缓存原理
如果我们不适用redis 他默认是用的是一个ConcurrentMapCacheManager ,使用的是SimpleCacheConfiguration configuration 类
先看CacheAutoConfiguration
-
/**
-
* {@link ImportSelector} to add {@link CacheType} configuration classes.
-
*/
-
static class CacheConfigurationImportSelector implements ImportSelector {
-
-
-
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
-
CacheType[] types = CacheType.values();
-
String[] imports = new String[types.length];
-
for (int i = 0; i < types.length; i++) {
-
imports[i] = CacheConfigurations.getConfigurationClass(types[i]);
-
}
-
return imports;
-
}
-
-
}
-
public static String getConfigurationClass(CacheType cacheType) {
-
Class<?> configurationClass = MAPPINGS.get(cacheType);
-
Assert.state(configurationClass != null, () -> “Unknown cache type ” + cacheType);
-
return configurationClass.getName();
-
}
-
static {
-
Map<CacheType, Class<?>> mappings = new EnumMap<>(CacheType.class);
-
mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class);
-
mappings.put(CacheType.EHCACHE, EhCacheCacheConfiguration.class);
-
mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class);
-
mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class);
-
mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class);
-
mappings.put(CacheType.COUCHBASE, CouchbaseCacheConfiguration.class);
-
mappings.put(CacheType.REDIS, RedisCacheConfiguration.class);
-
mappings.put(CacheType.CAFFEINE, CaffeineCacheConfiguration.class);
-
mappings.put(CacheType.SIMPLE, SimpleCacheConfiguration.class);
-
mappings.put(CacheType.NONE, NoOpCacheConfiguration.class);
-
MAPPINGS = Collections.unmodifiableMap(mappings);
-
}
这就是java 所有的缓存配置,默认是simpleCacheConfiguration 为什么我们导入了redis starter 就使用了 redis ? 我们看下启动日志
-
Negative matches:
-
—————–
-
-
ActiveMQAutoConfiguration:
-
Did not match:
-
–
-
-
AopAutoConfiguration:
-
Did not match:
-
–
-
-
ArtemisAutoConfiguration:
-
Did not match:
-
–
-
-
BatchAutoConfiguration:
-
Did not match:
-
–
-
-
CacheAutoConfiguration.CacheManagerJpaDependencyConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
CaffeineCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.github.benmanes.caffeine.cache.Caffeine’ (OnClassCondition)
-
-
CassandraAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.datastax.driver.core.Cluster’ (OnClassCondition)
-
-
CassandraDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Cluster’, ‘org.springframework.data.cassandra.core.CassandraAdminOperations’ (OnClassCondition)
-
-
CassandraReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Cluster’, ‘org.springframework.data.cassandra.core.ReactiveCassandraTemplate’ (OnClassCondition)
-
-
CassandraReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.data.cassandra.ReactiveSession’, ‘org.springframework.data.cassandra.repository.ReactiveCassandraRepository’ (OnClassCondition)
-
-
CassandraRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.datastax.driver.core.Session’, ‘org.springframework.data.cassandra.repository.CassandraRepository’ (OnClassCondition)
-
-
CloudAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.cloud.config.java.CloudScanConfiguration’ (OnClassCondition)
-
-
CouchbaseAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.CouchbaseBucket’, ‘com.couchbase.client.java.Cluster’ (OnClassCondition)
-
-
CouchbaseCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘com.couchbase.client.spring.cache.CouchbaseCacheManager’ (OnClassCondition)
-
-
CouchbaseDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.CouchbaseRepository’ (OnClassCondition)
-
-
CouchbaseReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.ReactiveCouchbaseRepository’ (OnClassCondition)
-
-
CouchbaseReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.ReactiveCouchbaseRepository’ (OnClassCondition)
-
-
CouchbaseRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.couchbase.client.java.Bucket’, ‘org.springframework.data.couchbase.repository.CouchbaseRepository’ (OnClassCondition)
-
-
DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
-
Did not match:
-
– EmbeddedDataSource found supported pooled data source (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
-
-
DataSourceConfiguration.Dbcp2:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.commons.dbcp2.BasicDataSource’ (OnClassCondition)
-
-
DataSourceConfiguration.Generic:
-
Did not match:
-
– @ConditionalOnProperty (spring.datasource.type) did not find property ‘spring.datasource.type’ (OnPropertyCondition)
-
-
DataSourceConfiguration.Tomcat:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSource’ (OnClassCondition)
-
-
DataSourceJmxConfiguration.TomcatDataSourceJmxConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSourceProxy’ (OnClassCondition)
-
-
DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.commons.dbcp2.BasicDataSource’ (OnClassCondition)
-
-
DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.apache.tomcat.jdbc.pool.DataSource’ (OnClassCondition)
-
-
DevToolsDataSourceAutoConfiguration.DatabaseShutdownExecutorJpaDependencyConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver:
-
Did not match:
-
– @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver (OnBeanCondition)
-
-
EhCacheCacheConfiguration:
-
Did not match:
-
–
-
-
ElasticsearchAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.client.TransportClientFactoryBean’ (OnClassCondition)
-
-
ElasticsearchDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.core.ElasticsearchTemplate’ (OnClassCondition)
-
-
ElasticsearchRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.elasticsearch.client.Client’, ‘org.springframework.data.elasticsearch.repository.ElasticsearchRepository’ (OnClassCondition)
-
-
EmbeddedLdapAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.unboundid.ldap.listener.InMemoryDirectoryServer’ (OnClassCondition)
-
-
EmbeddedMongoAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘de.flapdoodle.embed.mongo.MongodStarter’ (OnClassCondition)
-
-
EmbeddedWebServerFactoryCustomizerAutoConfiguration.JettyWebServerFactoryCustomizerConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.eclipse.jetty.server.Server’, ‘org.eclipse.jetty.util.Loader’, ‘org.eclipse.jetty.webapp.WebAppContext’ (OnClassCondition)
-
-
EmbeddedWebServerFactoryCustomizerAutoConfiguration.UndertowWebServerFactoryCustomizerConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘io.undertow.Undertow’, ‘org.xnio.SslClientAuthMode’ (OnClassCondition)
-
-
ErrorWebFluxAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.config.WebFluxConfigurer’ (OnClassCondition)
-
-
FlywayAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.flywaydb.core.Flyway’ (OnClassCondition)
-
-
FreeMarkerAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘freemarker.template.Configuration’ (OnClassCondition)
-
-
GenericCacheConfiguration:
-
Did not match:
-
– @ConditionalOnBean (types: org.springframework.cache.Cache; SearchStrategy: all) did not find any beans of type org.springframework.cache.Cache (OnBeanCondition)
-
Matched:
-
– Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition)
-
-
GroovyTemplateAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘groovy.text.markup.MarkupTemplateEngine’ (OnClassCondition)
-
-
GsonAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.google.gson.Gson’ (OnClassCondition)
-
-
GsonHttpMessageConvertersConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.google.gson.Gson’ (OnClassCondition)
-
-
H2ConsoleAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.h2.server.web.WebServlet’ (OnClassCondition)
-
-
HazelcastAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.hazelcast.core.HazelcastInstance’ (OnClassCondition)
-
-
HazelcastCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.hazelcast.core.HazelcastInstance’, ‘com.hazelcast.spring.cache.HazelcastCacheManager’ (OnClassCondition)
-
-
HazelcastJpaDependencyAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.hazelcast.core.HazelcastInstance’, ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’ (OnClassCondition)
-
-
HibernateJpaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean’, ‘javax.persistence.EntityManager’ (OnClassCondition)
-
-
HttpHandlerAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.web.reactive.DispatcherHandler’ (OnClassCondition)
-
-
HypermediaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.hateoas.Resource’, ‘org.springframework.plugin.core.Plugin’ (OnClassCondition)
-
-
InfinispanCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.infinispan.spring.provider.SpringEmbeddedCacheManager’ (OnClassCondition)
-
-
InfluxDbAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.influxdb.InfluxDB’ (OnClassCondition)
-
-
IntegrationAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.integration.config.EnableIntegration’ (OnClassCondition)
-
-
JCacheCacheConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.cache.Caching’ (OnClassCondition)
-
-
JacksonAutoConfiguration.JodaDateTimeJacksonConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.joda.time.DateTime’, ‘com.fasterxml.jackson.datatype.joda.ser.DateTimeSerializer’, ‘com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat’ (OnClassCondition)
-
-
JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.fasterxml.jackson.dataformat.xml.XmlMapper’ (OnClassCondition)
-
-
JedisConnectionConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.apache.commons.pool2.impl.GenericObjectPool’, ‘redis.clients.jedis.Jedis’ (OnClassCondition)
-
-
JerseyAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.glassfish.jersey.server.spring.SpringComponentProvider’ (OnClassCondition)
-
-
JestAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘io.searchbox.client.JestClient’ (OnClassCondition)
-
-
JmsAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘javax.jms.Message’, ‘org.springframework.jms.core.JmsTemplate’ (OnClassCondition)
-
-
JndiConnectionFactoryAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.jms.core.JmsTemplate’ (OnClassCondition)
-
-
JndiDataSourceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.datasource.jndi-name) did not find property ‘jndi-name’ (OnPropertyCondition)
-
Matched:
-
– @ConditionalOnClass found required classes ‘javax.sql.DataSource’, ‘org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType’;
-
-
JooqAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.jooq.DSLContext’ (OnClassCondition)
-
-
JpaRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.jpa.repository.JpaRepository’ (OnClassCondition)
-
-
JsonbAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.json.bind.Jsonb’ (OnClassCondition)
-
-
JsonbHttpMessageConvertersConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.json.bind.Jsonb’ (OnClassCondition)
-
-
JtaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.transaction.Transaction’ (OnClassCondition)
-
-
KafkaAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.kafka.core.KafkaTemplate’ (OnClassCondition)
-
-
LdapAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.ldap.core.ContextSource’ (OnClassCondition)
-
-
LdapDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.ldap.repository.LdapRepository’ (OnClassCondition)
-
-
LdapRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.ldap.repository.LdapRepository’ (OnClassCondition)
-
-
LiquibaseAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘liquibase.integration.spring.SpringLiquibase’, ‘liquibase.change.DatabaseChange’ (OnClassCondition)
-
-
MailSenderAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘javax.mail.internet.MimeMessage’ (OnClassCondition)
-
-
MailSenderValidatorAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.mail.test-connection) did not find property ‘test-connection’ (OnPropertyCondition)
-
-
MessageSourceAutoConfiguration:
-
Did not match:
-
– ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)
-
-
MongoAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.mongodb.MongoClient’ (OnClassCondition)
-
-
MongoDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘org.springframework.data.mongodb.core.MongoTemplate’ (OnClassCondition)
-
-
MongoReactiveAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.mongodb.reactivestreams.client.MongoClient’ (OnClassCondition)
-
-
MongoReactiveDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.reactivestreams.client.MongoClient’, ‘org.springframework.data.mongodb.core.ReactiveMongoTemplate’ (OnClassCondition)
-
-
MongoReactiveRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.reactivestreams.client.MongoClient’, ‘org.springframework.data.mongodb.repository.ReactiveMongoRepository’ (OnClassCondition)
-
-
MongoRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘com.mongodb.MongoClient’, ‘org.springframework.data.mongodb.repository.MongoRepository’ (OnClassCondition)
-
-
MustacheAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.samskivert.mustache.Mustache’ (OnClassCondition)
-
-
MybatisAutoConfiguration.MapperScannerRegistrarNotFoundConfiguration:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.mybatis.spring.mapper.MapperFactoryBean; SearchStrategy: all) found beans of type ‘org.mybatis.spring.mapper.MapperFactoryBean’ &departmentMapper, &employeeMapper (OnBeanCondition)
-
-
Neo4jDataAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.neo4j.ogm.session.SessionFactory’, ‘org.springframework.data.neo4j.transaction.Neo4jTransactionManager’ (OnClassCondition)
-
-
Neo4jRepositoriesAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.neo4j.ogm.session.Neo4jSession’, ‘org.springframework.data.neo4j.repository.Neo4jRepository’ (OnClassCondition)
-
-
NoOpCacheConfiguration:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found beans of type ‘org.springframework.cache.CacheManager’ cacheManager (OnBeanCondition)
-
Matched:
-
– Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition)
-
-
OAuth2ClientAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.security.config.annotation.web.configuration.EnableWebSecurity’, ‘org.springframework.security.oauth2.client.registration.ClientRegistration’ (OnClassCondition)
-
-
ProjectInfoAutoConfiguration#buildProperties:
-
Did not match:
-
– @ConditionalOnResource did not find resource ‘${spring.info.build.location:classpath:META-INF/build-info.properties}‘ (OnResourceCondition)
-
-
ProjectInfoAutoConfiguration#gitProperties:
-
Did not match:
-
– GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition)
-
-
QuartzAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.quartz.Scheduler‘ (OnClassCondition)
-
-
RabbitAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.amqp.rabbit.core.RabbitTemplate‘, ‘com.rabbitmq.client.Channel‘ (OnClassCondition)
-
-
ReactiveUserDetailsServiceAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.security.authentication.ReactiveAuthenticationManager‘ (OnClassCondition)
-
-
ReactiveWebServerFactoryAutoConfiguration:
-
Did not match:
-
– not a reactive web application (OnWebApplicationCondition)
-
Matched:
-
– @ConditionalOnClass found required class ‘org.springframework.http.ReactiveHttpInputMessage‘; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
-
-
RedisAutoConfiguration#redisTemplate:
-
Did not match:
-
– @ConditionalOnMissingBean (names: redisTemplate; SearchStrategy: all) found beans named redisTemplate (OnBeanCondition)
-
-
RemoteDevToolsAutoConfiguration:
-
Did not match:
-
– @ConditionalOnProperty (spring.devtools.remote.secret) did not find property ‘secret‘ (OnPropertyCondition)
-
Matched:
-
– @ConditionalOnClass found required classes ‘javax.servlet.Filter‘, ‘org.springframework.http.server.ServerHttpRequest‘; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
-
-
RepositoryRestMvcAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration‘ (OnClassCondition)
-
-
SecurityAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.security.authentication.DefaultAuthenticationEventPublisher‘ (OnClassCondition)
-
-
SecurityFilterAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer‘, ‘org.springframework.security.config.http.SessionCreationPolicy‘ (OnClassCondition)
-
-
SendGridAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘com.sendgrid.SendGrid‘ (OnClassCondition)
-
-
ServletWebServerFactoryConfiguration.EmbeddedJetty:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘org.eclipse.jetty.server.Server‘, ‘org.eclipse.jetty.util.Loader‘, ‘org.eclipse.jetty.webapp.WebAppContext‘ (OnClassCondition)
-
-
ServletWebServerFactoryConfiguration.EmbeddedUndertow:
-
Did not match:
-
– @ConditionalOnClass did not find required classes ‘io.undertow.Undertow‘, ‘org.xnio.SslClientAuthMode‘ (OnClassCondition)
-
-
SessionAutoConfiguration:
-
Did not match:
-
– @ConditionalOnClass did not find required class ‘org.springframework.session.Session‘ (OnClassCondition)
-
-
SimpleCacheConfiguration:
-
Did not match:
-
– @ConditionalOnMissingBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found beans of type ‘org.springframework.cache.CacheManager‘ cacheManager (OnBeanCondition)
-
Matched:
-
– Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition)
simpleCacheConfiguration 是被排除的为什么?
-
-
-
-
class SimpleCacheConfiguration {
@ConditionaLOnMissingBean 这个注解,
意思说看看容器中有没有CacheManager 这种类型的组件,如果有这个类就GG 不会被加载容器中 ,
之前说过
-
static {
-
Map<CacheType, Class<?>> mappings = new EnumMap<>(CacheType.class);
-
mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class);
-
mappings.put(CacheType.EHCACHE, EhCacheCacheConfiguration.class);
-
mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class);
-
mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class);
-
mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class);
-
mappings.put(CacheType.COUCHBASE, CouchbaseCacheConfiguration.class);
-
mappings.put(CacheType.REDIS, RedisCacheConfiguration.class);
-
mappings.put(CacheType.CAFFEINE, CaffeineCacheConfiguration.class);
-
mappings.put(CacheType.SIMPLE, SimpleCacheConfiguration.class);
-
mappings.put(CacheType.NONE, NoOpCacheConfiguration.class);
-
MAPPINGS = Collections.unmodifiableMap(mappings);
-
}
这些Configuraction 都是按照顺序加载的,我们看到redisCacheConfiguration 比SimpleCacheConfiguration 的顺序级别高,因此当加载到simpleCacheConfiguration 已经通过redisCacheConfiuration 创建了 RedisCacheManager ,因此不会创建了simpleCacheConfiguraction
redisCacheManager 干什么?
他是通过redisCache来完成缓存的
-
protected RedisCache createRedisCache(String name,
-
return new RedisCache(name, cacheWriter, cacheConfig != null ? cacheConfig : defaultCacheConfig);
-
}
redisCache通过操作redis 来进行缓存数据
默认保存数据是一k-v的形式存储的,都是object,利用序列化保存
如何存为json ?
配置一个自定义个rediscacheManger
-
package com.zzq.springboot01cache.config;
-
-
import com.sun.org.apache.bcel.internal.generic.RET;
-
import com.sun.org.apache.bcel.internal.generic.RETURN;
-
import com.zzq.springboot01cache.entity.Department;
-
import com.zzq.springboot01cache.entity.Employee;
-
import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer;
-
import org.springframework.cache.CacheManager;
-
import org.springframework.cache.annotation.CachingConfigurerSupport;
-
-
import org.springframework.cache.interceptor.KeyGenerator;
-
import org.springframework.context.annotation.Bean;
-
import org.springframework.context.annotation.Configuration;
-
import org.springframework.core.io.ResourceLoader;
-
import org.springframework.data.redis.cache.RedisCacheConfiguration;
-
import org.springframework.data.redis.cache.RedisCacheManager;
-
import org.springframework.data.redis.connection.RedisConnectionFactory;
-
import org.springframework.data.redis.core.RedisTemplate;
-
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
-
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-
import org.springframework.data.redis.serializer.RedisSerializationContext;
-
import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-
import java.net.UnknownHostException;
-
import java.time.Duration;
-
import java.util.Arrays;
-
-
-
-
public class MyredisConfig {
-
-
-
public KeyGenerator keyGenerator(){
-
return (target,method,params)->{
-
return method.getName()+“[“+ Arrays.asList(params)+“]”;
-
};
-
}
-
-
-
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
-
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
-
redisTemplate.setConnectionFactory(redisConnectionFactory);
-
// key序列化
-
redisTemplate.setKeySerializer(new StringRedisSerializer());
-
// value序列化
-
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
-
redisTemplate.afterPropertiesSet();
-
System.out.println(“RedisTemplate loading………….”);
-
return redisTemplate;
-
}
-
-
-
-
public CacheManager cacheManager(RedisConnectionFactory factory) {
-
RedisCacheConfiguration cacheConfiguration =
-
RedisCacheConfiguration.defaultCacheConfig()
-
.entryTtl(Duration.ofDays(1))
-
.disableCachingNullValues()
-
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new
-
GenericJackson2JsonRedisSerializer()));
-
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
-
}
-
-
-
-
}
这个参考
rediscacheconfiguraction 写
-
-
-
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
-
ResourceLoader resourceLoader) {
-
RedisCacheManagerBuilder builder = RedisCacheManager
-
.builder(redisConnectionFactory)
-
.cacheDefaults(determineConfiguration(resourceLoader.getClassLoader()));
-
List<String> cacheNames = this.cacheProperties.getCacheNames();
-
if (!cacheNames.isEmpty()) {
-
builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
-
}
-
return this.customizerInvoker.customize(builder.build());
-
}
-
转自:https://blog.csdn.net/qq_39148187/article/details/82469062