首页 > 数据库 >ignite系列之19-数据源扩展Postgresql

ignite系列之19-数据源扩展Postgresql

时间:2024-08-08 14:07:07浏览次数:10  
标签:ignite Postgresql String 数据源 cols dataSource return public

storeFactory.setDialect(dialect);
storeFactory.setDataSourceFactory(new DefaultDataSourceFactory((Object)null));
storeFactory.setCacheName(igniteTable.tableName());
import javax.cache.configuration.Factory;

public class DefaultDataSourceFactory<T> implements Factory<T> {
private T dataSource;

public DefaultDataSourceFactory(T dataSource) {
this.dataSource = dataSource;
}

public T create() {
return this.dataSource;
}
}



数据源pg

public static PGSimpleDataSource getPostgresqlDataSource(DataSource dataSource) {
PGSimpleDataSource realDs = null;
if (null != dataSource) {
realDs = new PGSimpleDataSource();
DataSource realDataSource = ((ItemDataSource)dataSource).getDataSource();
String userName = null;
String pwd = null;
String url = null;
if (realDataSource instanceof HikariDataSource) {
userName = ((HikariDataSource)realDataSource).getUsername();
pwd = ((HikariDataSource)realDataSource).getPassword();
url = ((HikariDataSource)realDataSource).getJdbcUrl();
}
realDs.setURL(url);
realDs.setUser(userName);
realDs.setPassword(pwd);
}

return realDs;
}
扩展dialect

import java.util.Collection; import org.apache.commons.lang3.StringUtils; import org.apache.ignite.cache.store.jdbc.dialect.BasicJdbcDialect; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.SB; public class PostgresqlDialect extends BasicJdbcDialect { private static final long serialVersionUID = 0L; private static final String WHERE = " where "; public PostgresqlDialect() { } public String escape(String ident) { return '"' + ident + '"'; } public String loadCacheSelectRangeQuery(String fullTblName, Collection<String> keyCols) { String cols = mkString(keyCols, ","); return String.format("SELECT %s FROM (SELECT %s, row_number() over(order by %s) AS rn FROM %s ) as temp WHERE mod(rn, ?) = 0", cols, cols, cols, fullTblName) } public boolean hasMerge() { return true; } public String mergeQuery(String fullTblName, Collection<String> keyCols, Collection<String> uniqCols) { Collection<String> cols = F.concat(false, keyCols, uniqCols); String primaryKeys = mkString(keyCols, ","); String updPart = mkString(uniqCols, new C1<String, String>() { public String apply(String col) { return String.format("%s = EXCLUDED.%s", col, col); } }, "", ", ", ""); return String.format("INSERT INTO %s (%s) VALUES (%s) ON conflict(%s) DO UPDATE SET %s", fullTblName, mkString(cols, ", "), repeat("?", cols.size(), "", ",", ""), primaryKeys, updPart); } }

  

标签:ignite,Postgresql,String,数据源,cols,dataSource,return,public
From: https://www.cnblogs.com/yangh2016/p/18348823

相关文章

  • IgniteFAQ-9-DataRegion OOM
    报错示例:[type=CRITICAL_ERROR,err=classo.a.i.i.mem.IgniteOutofMemoryException:Outofmemorytaregion[name=default,initsize=10.0MiB,maxsize=5.0GiB,persistenceEnabled=false]Trythefollowincreasemaximumoff-heapmemorysize(DataReglonconfiguration.maxs......
  • IgniteFAQ-12-Ignite报OOm
    Ignite报堆外内存OOM,最直接原因是现在是纯堆外内存存储,没有持久化数据量太大导致堆外内存不足,从而导致OOM,开发、测试环境排查可以先给比较大的内存,启动起来,通过如下两个sql查询真实数据量和占用内存大小来排查;如果是长期方案:1、建议合理评估数据量,针对堆外内存进行配置,针对数据......
  • IgniteFAQ-6-Ignite 通过zk组网时集群组网失败
    zk组网类ZookeeperDiscoverySpizkDiscoverySpi=newZookeeperDiscoverySpi();cfg.setDiscoverySpi(zkDiscoverySpi);配置示例:#ignite集群租房方式,配置zk为,zk集群组网方式fc.mybatis.ignite.discovery=zk#Ignitezk集群组网方式ignite.discoverySpi.zkConnectionStr......
  • ignite系列之18-Ignite 分布式锁
    Ignite事务会隐式获得分布式锁,但是有的场景可能需要显式获得锁。IgniteCacheAPI的lock()方法会返回java.util.concurrent.locks.Lock的实例,其可以获得指定键的显式分布式锁,通过IgniteCache.lockAll()方法,也可以在一个集合对象上获得锁。使用代码示例:IgniteCache<Object,......
  • IgniteFAQ-2-CacheWriterException: Failed to write entries in database
    ignite同步或者异步落库数据到DB时,如果因为落库的数据不满足db库的要求,如长度、精度、nonull等限制,就会出现落库失败报Failedtowriteentriesindatabase错误。ignite异步落库默认时5秒或者10240条flush一次,失败的数据会不断尝试,当存在一条数据以为数据库要求失败时,会卡住此表......
  • ignite系列之15--使用ignite构建服务端application配置项
    #false为服务端模式,true为客户端模式,此处配置falseignite.clientMode=false#类对等开关,默认开启,此处需要开启ignite.peerClassLoadingEnabled=true#集群发现端口,多个节点部署时端口是一个,localPortRange=1,addresses配置成ip1:port,ip2:portignite.discoverySpi.localPort=47500ig......
  • postgreSQL-12
    centos7-postgreSQL-12一、简介PostgreSQL是一个功能强大的开源的关系型数据库,底层基于c实现PostgreSQL社区特别活跃,基本是三个月发一版,允许跨版本升级PostgreSQL的官方地址:https://www.postgresql.orgPostgreSQL的国内社区:http://www.postgres.cn/v2/home以下基于12.x稳定......
  • 034.CI4框架CodeIgniter,纯净windows系统,一步步安装composer和CodeIgniter 4.5.4
    安装git选择路径 一路回车安装 安装phpstudy 安装好的界面 下载php8.2.9  点一下默认配置,确定 php版本要选择php8.2.9 需要安装的php扩展如下 点开网站的管理,设置一个根目录 php,启动 在根目录创建一个index.html的文件,用浏览器打开,看看能不能访......
  • TapData 信创数据源 | 国产信创数据库 OceanBase 数据同步指南,加速国产化进程,推进自主
    随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的TapData,自是非常重视对于更多国产信创数据库的数据连接器支持,旗下产品已陆续与阿里云、华为云、麒麟软件、优炫数据库、A......
  • EF Core连接PostgreSQL数据库
    PostgreSQL数据库介绍PostgreSQL是一个功能强大的开源对象关系型数据库管理系统(RDBMS)。最初于1986年在加州大学伯克利分校的POSTGRES项目中诞生,PostgreSQL以其稳定性、灵活性和扩展性而著称。它支持丰富的数据类型、复杂的查询、事务完整性、多版本并发控制(MVCC)、存储过程等高级......