プライマリ・データベースを参照する単一の接続プールを設定しようとしていますが、これは不健全になり、プールがフェールオーバーしてバックアップを埋めます。私は次のコードは、間違いなく、部分的にいくつかのひかりからcribbedいるプライマリ/バックアップDBを持つ単一JDBC OracleDataSource/HikariCP
jdbc:oracle:thin:@primary:1521:DB|jdbc:oracle:thin:@backup:1521:DB
を:今まで私は、私は以下のようなものを2 JDBC接続URL文字列を指定することができ、当社のアプリケーションサーバーのJNDIデータソースのドキュメント化されていない機能を活用してきました/春のドキュメンテーション月前。
@Bean(name = "dataSource")
public DataSource dataSource() throws SQLException {
String userName = "user";
String password = "pass";
String server = "primary";
String database = "DB";
OracleDataSource ods = new OracleDataSource();
ods.setServerName(server);
ods.setDatabaseName(database);
ods.setNetworkProtocol("tcp");
ods.setUser(userName);
ods.setPassword(password);
ods.setPortNumber(1521);
ods.setDriverType("thin");
HikariConfig hkConfig = new HikariConfig();
hkConfig.setDataSource(ods);
hkConfig.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");
hkConfig.setPoolName("springHikariRECPool");
hkConfig.setMaximumPoolSize(15);
hkConfig.setMinimumIdle(3);
hkConfig.setMaxLifetime(1800000); // 30 minutes
return new HikariDataSource(hkConfig);
}
私のGoogle-Fuが失敗しました。どのようにフェールオーバー機能を達成するためのアイディアがありますか?
編集 - re。 @M。 Deinum "OracleDataSourceの構築を削除し、HikariConfigでURLを設定するだけです。"そのhere - Hikaricp Oracle connection issueの
Caused by: java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL
at oracle.jdbc.pool.OracleDataSource.makeURL(OracleDataSource.java:1277)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:185)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:356)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:199)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:444)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:515)
調査とhere - Invalid Oracle URL specified: OracleDataSource.makeURLは、いくつかの追加のプロパティを追加するために私が発生します。
HikariConfig hkConfig = new HikariConfig();
hkConfig.setUsername(userName);
hkConfig.setPassword(password);
hkConfig.setJdbcUrl("jdbc:oracle:thin:@primary:1521:DB|jdbc:oracle:thin:@backup:1521:DB");
hkConfig.setDataSourceClassName("oracle.jdbc.pool.OracleDataSource");
hkConfig.setPoolName("springHikariRECPool");
hkConfig.setMaximumPoolSize(15);
hkConfig.setMinimumIdle(3);
hkConfig.setMaxLifetime(1800000);
残念ながら、これはかなり長いスタックを生成する、のベースはこれです。
と爆弾今hkConfig.addDataSourceProperty("portNumber", "1521");
hkConfig.addDataSourceProperty("driverType", "thin");
:
Caused by: java.net.UnknownHostException: null: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:117)
at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
JDBCのURLは、もはや参照されている、それが表示されないだろう。 。 。と確認しました - 私はURLからバックアップ接続文字列を取り出し、標準の単一サーバー接続で同じ例外に達しました。したがって、ODSは最初に実行されたように設定されている必要があります(または、Propertiesとまったく同じです)。
Caused by: java.net.UnknownHostException: primary|backup: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName(InetAddress.java:1192)
at java.net.InetAddress.getAllByName(InetAddress.java:1126)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:117)
at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411)
... 56 more
を私が注意することができなかったこれまでのことをしている:だけでなく爆破予想通り、|「スタンバイプライマリ」と、私がServerNameプロパティを設定しようとしたこのメソッドの最後のあがきとして
、私はojdbc7.jar
を使用しています。
'OracleDataSource'の構造を削除し、' HikariConfig'でURLを設定するだけです。 –
@M.Deinumの質問は更新されました。あなたのご意見ありがとうございます。 –