先下时间做了一个python爬虫,准备使用人人开源项目,把数据管理起来,但是在使用自己的数据库,打开多数据源配置的时候,出现了问题,下面记录一下问题
以前也使用过@DS注解,配置过多数据源,但是renren-fast,又自己封装了一些,比如对数据SQL的监视,记录,启动时的切面等,而且application.yml里面的配置也是从dynamic开始读取的,可以在配置文件里面看到如下:
我们需要在yml里面配置自己的数据源信息,在
启动的时候会加载config配置类,将配置信息放到里面,然后会在这里设置默认的数据库,renren-fast好像没有将primary放到配置里面,需要自己写一个方法,将设置的默认数据源信息放进去
讲完配置,还有使用,就是在使用@DS注解,这个很简单,方法在调用之前会被@DS里面的拦截器拦截,获取里面的值,@DynamicDataSourceAnnotationInterceptor ,这是@DS注解的拦截类,调用注解的DS都会被拦截到这里,看源码可知
里面的invoke(MethodInvocation invocation)方法就是获取注解里面的信息,
会把信息放到DynamicDataSourceContextHolder.push()[动态数据源上下文持有者]中,就是你即将是用哪个数据源的key
然后再AbstractRoutingDataSource类中获取连接getConnection(),this.determineTargetDataSource().getConnection();在具体的determineTargetDataSource()方法中返回具体的数据库配置信息
在这个方法里面,renren-fast重写了determineCurrentLookupKey()方法,但是在自己定义的DynamicContextHolder类中,却没有把相关的数据源key放入其中,就会获取不到key值,使用默认的数据库