2013-09-04 23 views
6

Mam aplikacji sieci web Java za pomocą Spring, Hibernate, Tomcat7 & MySql. Używam źródła danych do operacji na bazach danych. Nie jestem bardzo jasne, co jest standardowej lokalizacji do ładowania plików jar (Tomcat-jdbc.jar & Mysql-connector.jar) z? Działa, jeśli zatrzymam oba słoiki w wersji CATALINA_HOME/lib/ lub webapps/myApp/WEB-INF/lib. Ale powiedziano mi, aby używać tylko Tomcat-jdbc z CATALINA_HOME/lib/i mysql-connector.jar z /WEB-INF/lib/, co daje wyjątek ClassNotFound dlawyjątek dla. Czy ktoś może mi powiedzieć, które miejsce jest odpowiednie dla tych słoików?Gdzie powinny znajdować się pliki JAR sterownika JDBC na serwerze Tomcat ze źródłem danych?

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="initialSize" value="${db.initialSize}" /> 
     <property name="minIdle" value="${db.minIdle}" /> 
     <property name="maxActive" value="${db.maxActive}" /> 
     <property name="maxIdle" value="${db.maxIdle}" /> 
     <property name="testWhileIdle" value="${db.testWhileIdle}" /> 
     <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" /> 
     <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" /> 
     <property name="validationQuery" value="${db.validationQuery}" /> 
    </bean> 
+0

Czy masz sterownik MySQL na ścieżce klas? – NickJ

+0

Tak. /WEB-INF/lib/mysql-connector.jar – PeterGriffin

+0

Przeczytaj również [Apache Tomcat 6.0 Class Loader HOW-TO] (https://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html) –

Odpowiedz

0

Jeśli chodzi o lokalizację słoików do rozstrzygnięcia, zasada kciuka jest, że:

  1. Zastosowanie słoik na serwerze lib lokalizacji.
  2. Jeśli słoik nie jest dostępny, włącz to samo w folderze lib aplikacji.
  3. aby znaleźć odpowiednie słoiki, system szuka w następujących repozytoriów, w kolejności:

Bootstrap klas JVM klasy ładowarka klasa

systemowe (opisane powyżej)

/WEB-INF/klasy Twojej aplikacji internetowej /WEB-INF/lib/*.jar z

Twojej aplikacji internetowej $ CATALINA_HOME/common/classes

$ CATALINA_HOME/common/zatwierdzone/*. Jar

$ CATALINA_HOME/common/i18n/*. Jar

$ CATALINA_HOME/common/lib/*. Jar

$ CATALINA_BASE/shared/klasy

$ CATALINA_BASE/Shared/lib/*. jar

+0

Lista w tej odpowiedzi jest przestarzała od późniejszych wersji Tomcat. W wersji 8.0, patrz [Klasa ładujący JAK: TO] (https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html) i [this Answer] (http://stackoverflow.com/a/265552/642706) na podobne pytanie. –

9

To zależy od tego, kto zarządza źródło danych.

Jeśli ręcznie tworzysz i zarządzasz źródłem danych we własnej aplikacji internetowej, np. new SomeDataSource(), itp., Plik JAR sterownika JDBC można umieścić w aplikacji internetowej /WEB-INF/lib. Ale jeśli zdarzają się aplikacje, które już udostępniają ten sam plik JAR sterownika JDBC we własnym /lib, to możesz go po prostu użyć.

Jednakże, jeśli jesteś instruowania appserver zarządzać źródło danych samą w sobie, a ty po prostu wykorzystanie go w webapp poprzez @Resource, etc, to plik JAR sterownika JDBC musi być umieszczony w appserver własnego /lib , z bardzo prostego powodu, ponieważ źródło danych jest przygotowywane na starcie aplikacji serwera aplikacji, niezależnie od wszelkich (do) wdrażanych aplikacji internetowych. To źródło danych jest z kolei wspólne dla wszystkich aplikacji internetowych. Technicznie nie byłoby to możliwe, gdyby plik JAR sterownika JDBC był w jednym z nieużywanych aplikacji internetowych.

+0

Co, jeśli każda aplikacja korzysta z różnych dostawców baz danych? – PeterGriffin

+2

Możesz po prostu utworzyć więcej niż jedno źródło danych. – BalusC

+0

FYI ... Zobacz podobne [szczegółowe pomocne odpowiedzi również przez BalusC] (http://stackoverflow.com/a/2299870/642706) na podobne pytanie. –

Powiązane problemy