关于配置类中使用@Value失效问题

 在写一个小Demo的时候,发现我的DateSoure注入为null,后来通过对源码分析,发现该配置Bean也就是我的MybatisConfig在实例化时,AutowirteAnnotationBeanPostProcessor居然还没有实例化,导致@Value失效,后续把目光关注到@Configuration实例化时机,发现一个关键点

 MapperScannerConfigurer是一个BeanDefinitionRegistryPostProcessor,所以它会AutowirteAnnotationBeanPostProcessor之前实例化,而它实例化会导致我们配置类实例化(FactoryBean),由此导致配置类实例化时,AutowirteAnnotationBeanPostProcessor还没有实例化从而导致@Vaule失效,解决办法很简单,将MapperScannerConfigurer提出到其他配置类,或者把DataSource提出到其他类,当然也可以提前创建AutowirteAnnotationBeanPostProcessor,但是更改内部类创建时机不是好办法,可能导致某些Bug.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用代码方式配置 Ehcache 的缓存时间可以通过以下步骤进行: 1. 首先需要在 pom.xml 文件中添加 Ehcache 的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> ``` 2. 在 application.properties 文件中添加 Ehcache 的配置: ```properties spring.cache.type=ehcache ``` 3. 创建 Ehcache 的配置类: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableCaching public class EhcacheConfig { @Value("${ehcache.time-to-live-seconds}") private int timeToLiveSeconds; @Bean public CacheManagerCustomizer<EhCacheCacheManager> cacheManagerCustomizer() { return cacheManager -> cacheManager.getCacheManager().createCache("cacheName", EhCacheBuilder.newCacheConfigurationBuilder(String.class, Object.class, ResourcePoolsBuilder.heap(100)) .withExpiry(Expirations.timeToLiveExpiration(Duration.ofSeconds(timeToLiveSeconds))) .build()); } } ``` 在这个配置类中,我们使用了 `CacheManagerCustomizer` 接口来自定义 Ehcache 的缓存管理器。在 `cacheManagerCustomizer` 方法中,我们使用 `EhCacheBuilder` 来创建一个新的缓存。`EhCacheBuilder` 允许我们指定缓存的键和值类型,以及缓存的资源池大小。在这个例子中,我们使用了 `heap` 来指定缓存中最大的条目数为 100。同时,我们使用了 `withExpiry` 方法来指定缓存的过期时间为 `timeToLiveSeconds` 秒。最后,我们使用 `build` 方法来创建缓存。 4. 在需要使用缓存的方法上添加 `@Cacheable` 注解,指定缓存的名称: ```java @Service public class MyService { @Cacheable("cacheName") public Object getData() { // ... } } ``` 在这个例子中,我们使用了 `@Cacheable` 注解来标记需要被缓存的方法,并且指定了缓存的名称为 `cacheName`。 5. 在 application.properties 文件中添加缓存的过期时间: ```properties ehcache.time-to-live-seconds=604800 ``` 在这个例子中,我们将缓存的过期时间设置为 7 天,即 604800 秒。 通过以上步骤,我们就可以使用代码方式配置 Ehcache 的缓存时间了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值