Spring MVC Web アプリで構成するために表示されるすべての例servlet-context.xml
で、必要なデータソースはすべて、おそらくコンテナーで定義された接続プールを使用して、このファイルで Bean として構成されます。たとえば、 my servlet-context.xml
for myorg.springframework.web.servlet.DispatcherServlet
では、次のようにデータソースを初期化します。
<jee:jndi-lookup id="dataSource"
jndi-name="java:comp/env/jdbc/ora1"
expected-type="javax.sql.DataSource"
resource-ref="true" />
何らかの理由でデータベースがダウンしている場合、Web アプリが初期化段階でエラーになり、1 ヤード半の Java スタック トレースが次のようにブラウザーにスローされます。
javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1214) at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:615)
... 等々。
2 つの質問があります。
- このエラーをトラップして、ユーザーにとってよりわかりやすいものを表示することは可能ですか?
init()
個人的には、サーブレットがステージを超えられないのではないかと疑っています。 接続が必要なため、サーブレットコンテキストでデータソースを初期化し、@Controller から動的に初期化することは有効ではありませんか? より従来の方法と同様に、例えば:
public static DataSource getJndiDataSource() throws NamingException { Context initialContext = new InitialContext(); DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/ora1"); return ds; }
返信ありがとうございます。