1

セッションを使用してデータソースのURLを変更するか、現在の接続を新しい接続に変更するか、実行時に新しいデータソースを構築する必要があります(コントローラーまたはサービスで)

誰かが私に別の方法を教えてくれるならマルチデータソースを除外して教えてください

ありがとうございました

4

1 に答える 1

3

私には、最もクリーンではないアプローチがありますが、機能するはずです。dataSourceSpring Beanにアクセスできる場合は、そのプロパティを変更できます。プールされたすべての接続を閉じるには、それを取得する必要があります。そうすると、新しい接続は新しい設定を使用します。

他のBeanと同様に、依存性注入を使用してデータソースにアクセスできますdef dataSourceUnproxiedDataSourceGrailsが実際のプロキシをラップするトランザクション対応プロキシではなく、実際のプロキシを取得するには、「dataSource」の代わりに「dataSourceUnproxied」を使用する必要があります。

これを行うと、次のようにURL、ユーザー名などを変更できます。

dataSourceUnproxied.url = 'some other url'
dataSourceUnproxied.username = 'some other username'

次に、それを閉じてすべての接続を強制的に閉じますが、closedフラグをリセットして、次に再接続するようにだましますgetConnection()

dataSourceUnproxied.close()
dataSourceUnproxied.closed = false

DataSourceインターフェイスにはいくつかのメソッドしかないため、これはプールの実装に非常に固有です。これはorg.apache.commons.dbcp.BasicDataSource、Grailsがデフォルトで使用するもので機能しますが、別のプール実装を使用している場合は、同等のアプローチについてそのソースを調べる必要があります。

于 2012-09-26T14:32:32.513 に答える