1:问题描述
项目用了spring数据源动态切换,服务用的是dubbo。在运行一段时间后程序异常,更新操作没有切换到主库上。这个问题在先调用读操作后再调用写操作会出现。经分析原因有3: 第一:当程序运行一段时间后调用duboo服务时,读操作与写操作有可能会在一个线程里,当这种情况出现时
2:数据源配置
<idclass> <name> <key-type> <keyvalue-ref/> <keyvalue-ref/> </> </> <nameref/> </>
<idtransaction-manager> <> <namepropagation/> <namepropagation/> <namepropagation/> <namepropagation/> <namepropagation/> <namepropagation/> <namepropagation/> <namepropagationread-only/> <namepropagationread-only/> <namepropagationread-only/> </> </>
<> <pointcutadvice-ref/> </> <idclass/> <> <pointcutadvice-ref/> </>
com.flzc.user.aop; org.slf4j.Logger; org.springframework.aop.AfterReturningAdvice; org.springframework.aop.MethodBeforeAdvice; org.springframework.aop.ThrowsAdvice; java.lang.reflect.Method; DataSourceAdvice MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice { Logger = org.slf4j.LoggerFactory.(DataSourceAdvice.); before(Method method, Object[] args, Object target) Throwable { .info(+ target.().getName() + + method.getName() + ); (method.getName().startsWith() || method.getName().startsWith() || method.getName().startsWith() || method.getName().startsWith() || method.getName().startsWith() || method.getName().startsWith() || method.getName().startsWith()) { DataSourceSwitcher.(); .info(); } { DataSourceSwitcher.(); .info(); } } afterReturning(Object arg0, Method method, Object[] args, Object target) Throwable { .info(+ target.().getName() + + method.getName() + ); } afterThrowing(Method method, Object[] args, Object target, Exception ex) Throwable { DataSourceSwitcher.(); .error(); } }
时间: 2024-10-28 11:21:48