問題タブ [connection-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3842 参照

oracle - スタンドアロン (戦争) および組み込み Tomcat で Spring-Boot アプリケーションの DataSource を構成する方法は?

次のSpring-Boot-AplicationがありますdependencyManagement

および次のとおりdependenciesです。

Tomcatでは、 JNDI-Datasourceを次のように構成しました。

.properties-file に、次のプロパティを追加しました。

プロパティからDataSourceSpring-Bootを構成できるので、そうさせて、DataSource用の余分なコードを記述しません。スタンドアロンの Tomcatにデプロイすると、完全に機能します。

論理的には、 Spring Bootは組み込みの TomcatJNDI-Resourceを見つけることができず、取得したSpring-Boot-Applicationとしてアプリケーションを開始します。

アプリケーションをSpring-Boot-Applicationとして起動し、任意のStandalone Tomcatにデプロイできるwarファイルもビルドできるようにしたいと考えています。

アプリケーションがSpring-Boot-Applicationとして開始された場合、または2番目のファイルが必要なproperties場合に備えて、2番目のDataSourceを追加することでこれは可能ですか?.properties

0 投票する
2 に答える
688 参照

java - postgresql (set role user) コマンドは SSM プロジェクトでどのように使用されますか?

これでプロジェクトは springmvc+ spring + mybatis + druid + postgresql を使用しています プロジェクト内のユーザーはデータベース内のユーザーに対応しているため、SQL を実行するたびに (set role user) コマンドでユーザーを切り替えてから crud を実行しますデータベースの操作。

私の質問: 接続プールには多数の接続があるため、最初にデータベースの接続を取得し、次にユーザーを切り替えてから、データベースに対してビジネス SQL の操作を実行します。しかし、接続プールの接続と SQL の実行が基になるコードによって実装されているため、このロジックをプロジェクトのどの部分で処理する必要があるのか​​ わかりません。何か良い計画はありますか?次の操作など、完全なデモを提供してもらえますか。

ステップ 1、Spring Security (または shiro) からユーザーの名前を取得します。

ステップ 2、現在データベースを使用している接続を接続プールから取得します。

ステップ 3、SQL を実行して (役割ユーザーを設定)、役割を切り替えます。

ステップ 4、crud 操作を実行します。

ステップ 5、データベース接続をリセットする (役割のリセット)

0 投票する
1 に答える
2198 参照

java - 単一の JDBC 接続で複数の JPA クエリを実行する方法

Spring-boot アプリケーションでは、JPA と Hibernate を使用しています。

JPAリポジトリで定義されたパラメーター化されたIN句を使用したカスタム選択クエリメソッドがあります。データが膨大であるため、パラメーターとして渡された ID の小さなバッチを使用して、同じクエリを複数回実行しています。しかし、パフォーマンスを向上させることはできません。

約 200000 件のレコードがあり、所要時間は 1 分です。これは非常に巨大です。

以下は私が疲れたものです

  1. POJO全体ではなく、必要な列のみを選択すると、クエリ時間が8秒短縮されました
  2. Hibernate の統計を分析したところ、次のログが見つかりました。

    ( 1 個の JDBC 接続の取得に 382016470 ナノ秒、0 個の JDBC 接続の解放に 0 ナノ秒、1 個の JDBC ステートメントの準備に 798909958 ナノ秒、1 個の JDBC ステートメントの実行に 305523944 ナノ秒、0 個の JDBC バッチの実行に 0 ナノ秒、0 個の L2C プットの実行に 0 ナノ秒、0 0 個の L2C ヒットの実行に費やされたナノ秒; 0 個の L2C ミスの実行に費やされた 0 ナノ秒; 0 個のフラッシュの実行に費やされた 0 ナノ秒 (合計 0 個のエンティティと 0 個のコレクションのフラッシュ); 0 個の部分フラッシュの実行に費やされた 0 ナノ秒 (合計 0 個のエンティティと 0 個のフラッシュのフラッシュ)コレクション)

Hikari接続のPoolでもJDBC接続の作成に時間がかかります。以下は光のプロパティです

  1. そして、JPAクエリごとにJDBC接続が確立され、準備されます。次のプロパティを設定した後でも

    spring.datasource.hikari.data-source-properties.cachePrepStmts=true spring.datasource.hikari.data-source-properties.useServerPrepStmts=true

IN句のパラメータ数は一定にしています

コード スニップネット

パフォーマンスを改善したいのですが、提案は大歓迎です。

JDBC クエリの準備時間または JDBC 接続の取得時間を回避する方法はありますか?