Skip to content

ConnectionSupplier

DB接続を行う際のコネクションを提供するクラスです。 標準で以下のクラスが提供されているので用途に応じて使い分けてください。

クラス名説明
DefaultConnectionSupplierImplコンストラクタで受け取ったコネクションを返すだけのコネクション供給クラス
JdbcConnectionSupplierImplJDBCドライバーマネージャを使用したコネクション提供クラス
DataSourceConnectionSupplierImplデータソースを使用したコネクション提供クラス

また、ConnectionSupplierインタフェースを実装した独自のJDBCコネクション提供クラスを利用することもできます。

ConnectionSupplierインタフェースの設定メソッド

ConnectionSupplierインタフェースには以下の設定用メソッドが定義されています。
これらの設定メソッドを使用することで、ConnectionSupplierが提供するConnectionオブジェクトの挙動を変更することができます。

メソッド名説明
setDefaultCacheSchema 0.26.10+デフォルトのDB接続情報にスキーマ名のキャッシュオプションを指定します。
true を指定した場合、getConnection() で取得するConnectionオブジェクトは最初にConnection#getSchema() で取得したスキーマ名をキャッシュします。
2回目以降の呼び出しではキャッシュしたスキーマ名を返却することでConnection#getSchema() の中で呼び出されるDBアクセスを抑止することができます。
Postgresqlなど、Connection#getSchema() で毎回DBアクセスを行うのJDBCドライバー実装で、スキーマの変更が頻繁に発生しない場合にこのオプションの指定を検討してください。
setDefaultFixSchema 0.26.11+デフォルトのDB接続情報にスキーマ名の固定オプションを指定します。
true を指定した場合、getConnection() で取得するConnectionオブジェクトはスキーマ名が固定されます。
スキーマ名を固定することでConnection#getSchema() の中ではDBアクセスが行われなくなりますが、制限としてConnection#setSchema()を使ったスキーマの変更ができなくなります。
スキーマ名の変更が不要な場合ににこのオプションの指定を検討してください。

ConnectionContext 0.19.0+

動的にSqlAgentの接続先を切り替える場合は、SqlConfig#agent(ConnectionContext)メソッドを使用します。

ConnectionContextは、ConnectionContextBuilderの下記メソッドを利用して、インスタンスを生成します。

戻り値メソッド名説明
DataSourceConnectionContextdataSource()DataSourceConnectionContext を生成する.
DataSourceConnectionContextdataSource(String dataSourceName)DataSourceConnectionContext を生成する.
JdbcConnectionContextjdbc(String url)JdbcConnectionContext を生成する.
JdbcConnectionContextjdbc(String url, String user, String password)JdbcConnectionContext を生成する.
JdbcConnectionContextjdbc(String url, String user, String password, String schema)JdbcConnectionContext を生成する.

実装例

java
SqlConfig config = UroboroSQL
    .builder()
    .setConnectionSupplier(new JdbcConnectionSupplier("jdbc:h2:mem:mainConnection", "sa", "sa"))
    .build();

try (SqlAgent agent = config.agent()) {
  // using jdbc:h2:mem:mainConnection
  agent.required(() -> {
    ....
  });
}

//-------------------------------------------------------

try (SqlAgent agent = config.agent(ConnectionContextBuilder
				.jdbc("jdbc:h2:mem:subConnection", "sa", "sa"))) {
  // usingjdbc:h2:mem:subConnection
  agent.required(() -> {
    ....
  });
}