AopContext.currentProxy() 解决 cache不生效

本文探讨了在Spring框架中,当UserService类的create()方法调用findById(Long id)时,若直接使用this或直接调用,可能导致缓存失效的问题。通过配置expose-proxy=true并使用AopContext.currentProxy()方法,可以正确利用代理,确保缓存机制正常工作。

比如:UserService 类的某个方法create()调用了 findById(Long id) 方法,并且findById(Long id) 方法用了spring的缓存。
如果直接用this,或者直接调用,缓存就会失效。这时候可以在UserService内使用 ((UserService)AopContext.currentProxy()) 获取当前类的代理,强制转换为当前类。使用方式如下:

  1. 配置 expose-proxy="true"
    <aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true" />

2、使用代理。代码类型下面。

public class UserServiceImpl implements UserService {
	
	public void create(){
		//使用代理
		((UserService)AopContext.currentProxy()).findById(1110);
	}
	@Cacheable(cacheNames=, key="#某个key", unless="#result == null")
	public User findById(Long id){
		return User
	}
}

参考文档: https://blog.youkuaiyun.com/weixin_35796363/article/details/86306291

转载于:https://my.oschina.net/kunBlog/blog/3089755

给定引用中未提及jetcache.remote.default.uri不生效解决方案,不过可以从常见的配置问题排查思路来提供一些可能的解决办法。 ### 检查配置文件 确保配置文件中`jetcache.remote.default.uri`的配置格式正确,像引用[1]中的格式为: ``` jetcache: areaInCacheName: false remote: default: type: redis.lettuce keyConvertor: fastjson uri: - redis://127.0.0.1:7000 - redis://127.0.0.1:7001 - redis://127.0.0.1:7002 ``` 要保证缩进、冒号等语法无误。 ### 检查Redis服务状态 要确保配置的Redis服务正常运行,可通过以下命令检查: ```bash redis-cli -h 127.0.0.1 -p 7000 ping ``` 若返回`PONG`,则表明Redis服务正常。 ### 检查依赖 确保项目中引入了正确的JetCache依赖和Lettuce依赖。以Maven为例: ```xml <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis-lettuce</artifactId> <version>2.6.0</version> </dependency> ``` ### 检查配置加载 确保配置文件被正确加载。可在代码中打印配置信息来验证: ```java import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; import com.alicp.jetcache.anno.config.EnableMethodCache; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication @EnableMethodCache(basePackages = "com.example") @EnableCreateCacheAnnotation public class Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); String[] uris = context.getEnvironment().getProperty("jetcache.remote.default.uri", String[].class); if (uris != null) { for (String uri : uris) { System.out.println(uri); } } } } ``` ### 检查网络连接 确保应用程序所在的服务器能够访问配置的Redis地址和端口,可通过以下命令检查: ```bash telnet 127.0.0.1 7000 ``` 若能正常连接,则网络无问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值