[解決済み] Tomcatが提供するJNDI DataSourceをSpringで使用するには?
2022-04-25 13:36:43
質問
Springのjavadocの記事で、以下のように言われています。
DriverManagerDataSource
このクラスは非常にシンプルであり、推奨されるクラスです。
コンテナが提供するJNDI DataSourceを使用することです。このような
DataSource
として公開することができます。DataSource
を経由して Spring ApplicationContext 内のJndiObjectFactoryBean
という質問です。 どうすれば実現できるのか?
例えば
DataSource
ビーンを使用して、独自の MySQL データベースにアクセスするには、何が必要ですか?コンテキスト設定に何を書けばいいのか、などなど。
どのように解決するのですか?
SpringのXMLスキーマベースの設定を使用する場合は、Springのコンテキストで以下のように設定します。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
...
<jee:jndi-lookup id="dbDataSource"
jndi-name="jdbc/DatabaseName"
expected-type="javax.sql.DataSource" />
あるいは、以下のような簡単なビーン設定で設定します。
<bean id="DatabaseName" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>
tomcat の server.xml で JNDI リソースを宣言するには、次のようにします。
<GlobalNamingResources>
<Resource name="jdbc/DatabaseName"
auth="Container"
type="javax.sql.DataSource"
username="dbUser"
password="dbPassword"
url="jdbc:postgresql://localhost/dbname"
driverClassName="org.postgresql.Driver"
initialSize="20"
maxWaitMillis="15000"
maxTotal="75"
maxIdle="20"
maxAge="7200000"
testOnBorrow="true"
validationQuery="select 1"
/>
</GlobalNamingResources>
そして、Tomcatのweb context.xmlからJNDIリソースを以下のように参照します。
<ResourceLink name="jdbc/DatabaseName"
global="jdbc/DatabaseName"
type="javax.sql.DataSource"/>
参考資料です。
- Tomcat 8 JNDI データソース HOW-TO
- Tomcat 8 コンテキストリソースリンク リファレンス
- Spring 4 JEE JNDI Lookup XML Schema リファレンス
- Spring 4 JndiObjectFactoryBean Javadoc
編集:この回答はTomcat 8とSpring 4のために更新されました。 Tomcatの デフォルト データソースリソースプールの設定
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
jd-gui Java Exceptionが発生しました。
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
final, finally, finalizeの違いについて話してください。
-
Dateが型に解決できない問題を解決する
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
プロジェクトの依存関係を解決できなかった 解決
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
JSPで「リストが型解決できない!」の解決方法
-
ローカルリソースのロードが許可されていない場合の解決策
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。