当前位置: 首页 > news >正文

临沂网站服务器价格十大中文网站排名

临沂网站服务器价格,十大中文网站排名,自做网站多少钱,wordpress自动发布插件背景 在项目开发过程中,我们可能会遇到一个场景:某个类型数据源有多个数据源实例,需要我们按照不同的请求切换到不同数据源去。 而目前绝大多数java应用都是基于Spring框架来开发,我们很多时候相关的数据源连接都是交给了Spring框…

背景

在项目开发过程中,我们可能会遇到一个场景:某个类型数据源有多个数据源实例,需要我们按照不同的请求切换到不同数据源去。
而目前绝大多数java应用都是基于Spring框架来开发,我们很多时候相关的数据源连接都是交给了Spring框架去管理,这就需要Spring能够支持动态数据源切换。

方案

Spring中预留了这个接口,通过AbstractRoutingDataSource能够动态切换数据源。

public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {

这是一个抽象类,预留了一个抽象方法:

protected abstract Object determineCurrentLookupKey();

我们知道,数据源一般都会提供一个getConnection方法来获取一个连接,在AbstractRoutingDataSource 实现如下:

	@Overridepublic Connection getConnection() throws SQLException {return determineTargetDataSource().getConnection();}protected DataSource determineTargetDataSource() {Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");Object lookupKey = determineCurrentLookupKey();DataSource dataSource = this.resolvedDataSources.get(lookupKey);if (dataSource == null && (this.lenientFallback || lookupKey == null)) {dataSource = this.resolvedDefaultDataSource;}if (dataSource == null) {throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");}return dataSource;}

可以看到,AbstractRoutingDataSource 获取连接的主要逻辑就是通过determineCurrentLookupKey获取到一个数据源的关联key,然后从resolvedDataSources中去获取。
resolvedDataSources的初始化,则放在afterPropertiesSet中:

	@Overridepublic void afterPropertiesSet() {if (this.targetDataSources == null) {throw new IllegalArgumentException("Property 'targetDataSources' is required");}this.resolvedDataSources = CollectionUtils.newHashMap(this.targetDataSources.size());this.targetDataSources.forEach((key, value) -> {Object lookupKey = resolveSpecifiedLookupKey(key);DataSource dataSource = resolveSpecifiedDataSource(value);this.resolvedDataSources.put(lookupKey, dataSource);});if (this.defaultTargetDataSource != null) {this.resolvedDefaultDataSource = resolveSpecifiedDataSource(this.defaultTargetDataSource);}}

这里起始就是通过targetDataSources中指定的数据源复制到resolvedDataSources 中去。因此如果多数源是固定的,那么只需要实现determineCurrentLookupKey方法即可。但是如果多数据源不固定,比如可能会有数据源的变更,那么这种实现是不能够支持,因为这种实现从服务启动的视乎,后续数据源就不能发生变更,这需要我们自己实现determineTargetDataSource.
下面是一个参考实现:

public class DataSourceContextHolder {private static final ThreadLocal<String> DATASOURCE_CONTEXT_KEY_HOLDER = new ThreadLocal<>();public static void switchDataSource(String key){log.info("Switch to data source:" + key);DATASOURCE_CONTEXT_KEY_HOLDER.set(key);}public static String getDataSourceKey(){return DATASOURCE_CONTEXT_KEY_HOLDER.get() ;}}public class DynamicDataSource extends AbstractRoutingDataSource {private Map<Object, Object> targetDataSources = new HashMap<>();private Map<Object, DataSource> dataSources = new HashMap<>();public DynamicDataSource (){super.setDefaultTargetDataSource(null);super.setTargetDataSources(targetDataSources);super.afterPropertiesSet();}@Overrideprotected DataSource determineTargetDataSource() {Object dataSourceKey = determineCurrentLookupKey();return dataSources.get(dataSourceKey);}@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder .getDataSourceKey();}public synchronized void addDataSource(String key, DataSource dataSource){targetDataSources.put(key,dataSource);dataSources.put(key,dataSource);log.info("add tenant dynamic dataSource for tenantId = {} ",key);}
}

这样我们通过DataSourceContextHolder 来调整当前线程关联的数据源。

http://www.15wanjia.com/news/24043.html

相关文章:

  • 统计局门户网站建设目标北京网站制作公司
  • 本地wordpress模板编辑器上海排名优化seo
  • 免费建设网站好吗淘宝推广软件哪个好
  • 创客贴网站做海报技能中国制造网外贸平台
  • 苏州网站开发建设公司恶意点击竞价时用的什么软件
  • 公司网站一定要备案吗千峰培训出来好就业吗
  • 网站直播间 是怎么做的哪里有网站推广优化
  • 惠州做网络推广的广西关键词优化公司
  • 海南棋牌网站建设网推怎么推广
  • 高端网站定制的方法近三天的国内外大事
  • 武汉网站建设开发山东网络推广优化排名
  • 怎么查看网站是哪家公司做的公司网站设计公司
  • 给做网站建设的一些建议百度app营销软件
  • 属于自己的网站哈尔滨网站制作软件
  • 医疗网站建设多少钱专业做网站公司
  • 网站建设新报价图片杭州网络推广
  • 郑州高端做网站网络整合营销4i原则
  • jsp做的网页是网站吗网址导航推广
  • 做a动漫视频在线观看网站南宁seo网络推广
  • 做网站需要什么许可证网站大全软件下载
  • 一个企业网站如何能放到互联网上 vpsseo研究中心教程
  • 淄博建站哪家好做一个公司网站要多少钱
  • 网站关键词突然没有排名了内容营销成功案例
  • 共享农业网站建设sem是什么岗位
  • 说明多媒体教学网站开发的一般步骤单页站好做seo吗
  • 网站log日志手机怎么制作网页
  • 学校网站建设培训心得体会重庆小潘seo
  • 在线兼容测试网站搜索指数的数据来源是什么
  • 深圳做分销网站公司营销策划书模板
  • 免费建设门户网站百度自动优化