
spring实战
文章平均质量分 52
spring使用
coder_sheep
这个作者很懒,什么都没留下…
展开
-
并发编程的两个案例
这个案例可能出现的问题,T1线程读取的偏移量是1,更新为2,T2线程读取的偏移量是1,获取锁更新为3,释放锁,T1线程获取锁更新为2,这时候预期是3,实际是2。那么这里为什么要去防止并发呢,因为一个页面加载,他可能会发起多个ajax请求,如果两个请求同时过来,都去查当前数据库,数据库里面的是老ip,都去发这个消息,虽然更新ip没问题,但是更新日志会写多条。针对以上问题对代码进行修改,取消声明式事务,使用编程式事务,这样既保证事务粒度很小,减少对数据库连接池的消耗,事务提交之后采取发送消息,才去释放锁。原创 2024-01-30 17:18:09 · 729 阅读 · 0 评论 -
spring事务扩展-如何写出可靠的事务代码
这个注解在两种情况下也会失效的,在方法内调用的时候,因为他没有经过bean的代理,所以他没法依赖spring的aop增强,去进行事务的控制;解决方案:就是把发送MQ消息放在本地事务执行之后,这个方案并不是分布式事物的解决方案,比如极端条件下,本地事务执行成功之后,消息还没有发送,机器挂掉或者重启了。背景:在进行团队代码review的时候,存在在事务里面去调用MQ的情况,实际上是需要本地事务提交成功之后再去发这个MQ,所以这个代码肯定是有问题的。spring的事务管理器。现在编写我们的工具类。原创 2024-01-30 09:57:56 · 445 阅读 · 0 评论 -
自定义注解实现动态数据源
通过这种创新性的方法,开发者可以根据业务需求轻松切换数据库连接,实现数据源的动态管理,提升系统的可扩展性和响应性。如果想要代理不失效,可以获取当前代理对象,然后通过该代理对象调用了 getByUserId2 方法,同时需要暴露代理类,在启动类上配置@EnableAspectJAutoProxy(exposeProxy = true)现在我们了解了想要动态切换数据源,在调用查找数据库之前设置这个key值,这样就可以使spring使用动态数据源的实现类根据key找到对应的数据库信息。原创 2024-01-29 15:35:05 · 546 阅读 · 0 评论