簡體   English   中英

部署在Tomcat上的Java應用程序無法連接到jdbc-mysql

[英]Java application deployed on Tomcat doesn't connect to jdbc-mysql

我正在嘗試恢復我們的tomcat服務器,但是這個應用程序沒有正確連接到MySQL。

這是發生了什么:

我有一個Java + Flex應用程序。 整個應用程序放在一個目錄(不是.war文件)中。

$TOMCAT_WEBAPP/myflex_app/WEB-INF/lib/ -> JDBC mysql driver goes here.

這是我的應用程序配置:

    <database>
            <rpgByMoodle user="moodle" password="moodle">
                    <url>jdbc:mysql://localhost:3306/rpgbymoodle</url>
            </rpgByMoodle>
            <moodle user="moodle" password="moodle">
                    <url>jdbc:mysql://localhost:3306/moodle</url>
            </moodle>
    </database>

所以,我能夠通過命令行客戶端連接mysql,但應用程序沒有。

我發現在互聯網上人們告訴使用一些Netbeans(或Eclipse)菜單“添加新連接”..但是,我無法訪問應用程序的源代碼。

我在Linux上運行tomcat。 我已經檢查了/var/log/tomcat6/的tomcat日志文件,並沒有發現jdbc。

我的卡塔琳娜日志:

Aug 4, 2011 9:24:25 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20
Aug 4, 2011 9:24:26 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Aug 4, 2011 9:24:26 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 977 ms

嘗試將JDBC jar文件放入tomcat-dir/common/lib並重啟Tomcat。
比較問題在Tomcat中管理庫

如果現在仍然有效,請從Tomcat日志文件中發布提取,查找連接而不是jdbc作為關鍵字。

我以前遇到過完全相同的問題並設法解決它。 Apache需要jdbc-msql的額外配置步驟。 首先,確保為SQL數據庫設置了正確的GRANT權限。

接下來,按照他的解決方案進行操作: http//dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat

首先,在$ CATALINA_HOME / common / lib中安裝Connector / J附帶的.jar文件,以便安裝在容器中的所有應用程序都可以使用它。

接下來,通過在定義Web應用程序的上下文中向$ CATALINA_HOME / conf / server.xml添加聲明資源來配置JNDI DataSource:

<Context ....>

...

<Resource name="jdbc/MySQLDB"
           auth="Container"
           type="javax.sql.DataSource"/>

<!-- The name you used above, must match _exactly_ here!

   The connection pool will be bound into JNDI with the name
   "java:/comp/env/jdbc/MySQLDB"
-->

<ResourceParams name="jdbc/MySQLDB">
<parameter>
  <name>factory</name>
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<!-- Don't set this any higher than max_connections on your
     MySQL server, usually this should be a 10 or a few 10's
     of connections, not hundreds or thousands -->

<parameter>
  <name>maxActive</name>
  <value>10</value>
</parameter>

<!-- You don't want to many idle connections hanging around
     if you can avoid it, only enough to soak up a spike in
     the load -->

<parameter>
  <name>maxIdle</name>
  <value>5</value>
</parameter>

<!-- Don't use autoReconnect=true, it's going away eventually
     and it's a crutch for older connection pools that couldn't
     test connections. You need to decide whether your application
     is supposed to deal with SQLExceptions (hint, it should), and
     how much of a performance penalty you're willing to pay
     to ensure 'freshness' of the connection -->

<parameter>
  <name>validationQuery</name>
  <value>SELECT 1</value> <-- See discussion below for update to this option -->
</parameter>

<!-- The most conservative approach is to test connections
    before they're given to your application. For most applications
    this is okay, the query used above is very small and takes
    no real server resources to process, other than the time used
    to traverse the network.

    If you have a high-load application you'll need to rely on
    something else. -->

 <parameter>
  <name>testOnBorrow</name>
  <value>true</value>
 </parameter>

 <!-- Otherwise, or in addition to testOnBorrow, you can test
    while connections are sitting idle -->

  <parameter>
   <name>testWhileIdle</name>
   <value>true</value>
  </parameter>

 <!-- You have to set this value, otherwise even though
     you've asked connections to be tested while idle,
     the idle evicter thread will never run -->

 <parameter>
   <name>timeBetweenEvictionRunsMillis</name>
   <value>10000</value>
 </parameter>

 <!-- Don't allow connections to hang out idle too long,
     never longer than what wait_timeout is set to on the
     server...A few minutes or even fraction of a minute
     is sometimes okay here, it depends on your application
     and how much spikey load it will see -->

<parameter>
  <name>minEvictableIdleTimeMillis</name>
  <value>60000</value>
</parameter>

<!-- Username and password used when connecting to MySQL -->

<parameter>
 <name>username</name>
 <value>someuser</value>
</parameter>

<parameter>
 <name>password</name>
 <value>somepass</value>
</parameter>

<!-- Class name for the Connector/J driver -->

<parameter>
   <name>driverClassName</name>
   <value>com.mysql.jdbc.Driver</value>
</parameter>

<!-- The JDBC connection url for connecting to MySQL, notice
     that if you want to pass any other MySQL-specific parameters
     you should pass them here in the URL, setting them using the
     parameter tags above will have no effect, you will also
     need to use &amp; to separate parameter values as the
     ampersand is a reserved character in XML -->

<parameter>
  <name>url</name>
  <value>jdbc:mysql://localhost:3306/test</value>
</parameter>

如果您使用Eclipse Java EE運行Tomcat,
1)轉到“服務器”選項卡
2)雙擊Tomcat服務器
3)在“常規信息”部分,單擊“打開啟動配置”。
4)轉到Classpath選項卡並添加jdbc jar文件。
希望這個有用......為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM