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

营口旅游网站建设大型菜谱网站建设

营口旅游网站建设,大型菜谱网站建设,wordpress全站cdn教程,个人备案可以建企业网站吗项目中有一个需求,spring boot项目连接postgres数据库的地址,是存储在etcd当中的,在程序启动后,当etcd中的地址变化时,需要程序去连接新的postgres地址。 1. 修改Datasource定义,改为使用DynamicPGDataSou…

项目中有一个需求,spring boot项目连接postgres数据库的地址,是存储在etcd当中的,在程序启动后,当etcd中的地址变化时,需要程序去连接新的postgres地址。

1. 修改Datasource定义,改为使用DynamicPGDataSource,它是一个自定义类,集成了

AbstractRoutingDataSource
@Primary@Beanpublic DataSource druidDataSource() {DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();druidDataSource.setUrl(url);druidDataSource.setUsername(username);druidDataSource.setPassword(password);druidDataSource.setDriverClassName(driverClassName);druidDataSource.setInitialSize(druidInitSize);// 初始化连接数druidDataSource.setMinIdle(druidMinIdle); // 最小连接数druidDataSource.setMaxActive(druidMaxActive);// 最大连接数druidDataSource.setPoolPreparedStatements(true);// 开启缓存preparedStatementdruidDataSource.setUseGlobalDataSourceStat(true);// 开启Druid提供的3s慢SQL监控Properties properties = new Properties();properties.put("druid.stat.mergeSql", true);properties.put("druid.stat.slowSqlMillis", 3000);druidDataSource.setConnectProperties(properties);try {druidDataSource.setFilters("stat,wall");druidDataSource.init();} catch (SQLException e) {log.error("构建数据库连接池异常,异常原因:{}", e);throw new RuntimeException(e);}DynamicPGDataSource dynamicPGDataSource = new DynamicPGDataSource();Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put(ConnectInfo.currentPGIP, druidDataSource);dynamicPGDataSource.setTargetDataSources(targetDataSources);dynamicPGDataSource.setDefaultTargetDataSource(druidDataSource);return dynamicPGDataSource;}

2. 类定义

public class DynamicPGDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContext.getPGDataSource();}
}
public class DataSourceContext {private static String pgDataSource;public static void setPGDataSource(String ds) {pgDataSource = ds;}public static String getPGDataSource() {return pgDataSource;}
}

3. 定义re方法,当监听到数据源IP更改之后,去切换连接到新的数据源,并且关闭老的数据源连接。

public void refreshPGDataSource(String ip) {if(ConnectInfo.currentPGIP.equals(ip)) {log.info("currentPGIP equals ip, not operate, ip:{}", ip);}DynamicPGDataSource dynamicPGDataSource = ((DynamicPGDataSource)druidDataSource);Field field = null;try {field = AbstractRoutingDataSource.class.getDeclaredField("targetDataSources");} catch (NoSuchFieldException e) {e.printStackTrace();}field.setAccessible(true);// 获取当前的 targetDataSourcesMap<Object, Object> currentDataSources = null;try {currentDataSources = (Map<Object, Object>) field.get(dynamicPGDataSource);if(!currentDataSources.containsKey(ip)) {DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();String address = String.format("jdbc:postgresql://%s:5432/dsgdb?characterEncoding=utf-8&useSSL=false", ip);druidDataSource.setUrl(address);druidDataSource.setUsername(username);druidDataSource.setPassword(password);druidDataSource.setDriverClassName(driverClassName);druidDataSource.setInitialSize(20);// 初始化连接数druidDataSource.setMinIdle(10); // 最小连接数druidDataSource.setMaxActive(100);// 最大连接数druidDataSource.setPoolPreparedStatements(true);// 开启缓存preparedStatementdruidDataSource.setUseGlobalDataSourceStat(true);// 开启Druid提供的3s慢SQL监控Properties properties = new Properties();properties.put("druid.stat.mergeSql", true);properties.put("druid.stat.slowSqlMillis", 3000);druidDataSource.setConnectProperties(properties);druidDataSource.setFilters("stat,wall");currentDataSources.put(ip, druidDataSource);field.set(dynamicPGDataSource, currentDataSources);dynamicPGDataSource.afterPropertiesSet();}DataSourceContext.setPGDataSource(ip);ConnectInfo.currentPGIP = ip;// 关闭无用连接Iterator<Map.Entry<Object, Object>> iterator = currentDataSources.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<Object, Object> entry = iterator.next();if(!ip.equals(entry.getKey())) {DruidDataSource dataSource = (DruidDataSource)currentDataSources.get(entry.getKey());dataSource.close();iterator.remove();}}} catch (IllegalAccessException | SQLException e) {e.printStackTrace();}}

http://www.dtcms.com/a/580311.html

相关文章:

  • 专门做童装的网站网站建设合同书简单版
  • 郑州做网站的联系方式wordpress是一个软件吗
  • 能自己在家做网站吗盐城网站建设制作方案
  • 电商类网站有哪些精准营销系统
  • 西湖区商城网站建设怎么查公司名称是否被注册商标
  • 上海建站 seo网站集群建设价格
  • 手机网站 cms太原网站建设推广公司推荐
  • 网站服务器排名网页布局设计技术包括
  • 网站自己做还是用程序wordpress繁体语言包
  • 做网站看什么书猪仔wordpress
  • 购物商场网站开发过程详细说明制作app下载
  • 如何开网站详细步骤com域名类别
  • 做网站的的价位小企业网站建设怎样
  • 网站外链是什么网页打不开了
  • 做交易网站什么开发语言最近时政新闻
  • 找人合伙做网站平台国外服务器域名需要备案吗
  • 余姚住房和建设局网站怎么开始做网站
  • 济南品牌网站建设介绍wordpress文章地址
  • 网站开发主要职责推广平台排行榜
  • 做旅游网站犯法吗wordpress 4.8.1漏洞
  • 秦皇岛网站团队网站系统性能定义
  • 新建的网站打不开江苏九天建设有限公司网站
  • 注册公司网站地址该如何填建站公司兴田德润简介
  • 怎样做医疗网站不违法企业网站优化电话
  • 北京网站制作网站优化韩国电商网站
  • 商城网站主要功能域名服务器ip地址
  • 可以挣钱的设计网站怎么建设批量模板网站
  • 辽宁平台网站建设公司淮安做网站的公司有哪些公司
  • 辽宁阜新建设学校官方网站互联网前端开发
  • 品牌网站设计服务wordpress 指定分类