简体   繁体   English

部署在Tomcat上的Java应用程序无法连接到jdbc-mysql

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

I'm trying to restore our tomcat server, but there's this application that doesn't connect to MySQL properly. 我正在尝试恢复我们的tomcat服务器,但是这个应用程序没有正确连接到MySQL。

Here's what is happening: 这是发生了什么:

I had an Java + Flex application. 我有一个Java + Flex应用程序。 The entire application was placed into a directory (not a .war file). 整个应用程序放在一个目录(不是.war文件)中。

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

Here's my application config: 这是我的应用程序配置:

    <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>

So, I'm able to connect mysql through the command line client, but the application don't. 所以,我能够通过命令行客户端连接mysql,但应用程序没有。

I found on the internet people telling to "add new connection" using some Netbeans (or Eclipse) menus.. but, I haven't access to the source code of the application. 我发现在互联网上人们告诉使用一些Netbeans(或Eclipse)菜单“添加新连接”..但是,我无法访问应用程序的源代码。

I'm running tomcat on Linux. 我在Linux上运行tomcat。 I've checked the tomcat log file at /var/log/tomcat6/ and found nothing about jdbc. 我已经检查了/var/log/tomcat6/的tomcat日志文件,并没有发现jdbc。

My catalina log: 我的卡塔琳娜日志:

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

Try putting the JDBC jar file into tomcat-dir/common/lib and restart Tomcat. 尝试将JDBC jar文件放入tomcat-dir/common/lib并重启Tomcat。
Compare question Managing libraries in Tomcat . 比较问题在Tomcat中管理库

If this does still now work, post the extract from Tomcat log file, looking for connection not jdbc as keyword. 如果现在仍然有效,请从Tomcat日志文件中发布提取,查找连接而不是jdbc作为关键字。

I had the exact same problem before and managed to solve it. 我以前遇到过完全相同的问题并设法解决它。 Apache requires an extra configuration step for jdbc-msql. Apache需要jdbc-msql的额外配置步骤。 Firstly, make sure that you have the correct GRANT permissions set up for your SQL database. 首先,确保为SQL数据库设置了正确的GRANT权限。

Next, follow his solution which is taken from: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat 接下来,按照他的解决方案进行操作: http//dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat

First, install the .jar file that comes with Connector/J in $CATALINA_HOME/common/lib so that it is available to all applications installed in the container. 首先,在$ CATALINA_HOME / common / lib中安装Connector / J附带的.jar文件,以便安装在容器中的所有应用程序都可以使用它。

Next, Configure the JNDI DataSource by adding a declaration resource to $CATALINA_HOME/conf/server.xml in the context that defines your web application: 接下来,通过在定义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>

In case you are running Tomcat with Eclipse Java EE, 如果您使用Eclipse Java EE运行Tomcat,
1) Go to the Servers Tab 1)转到“服务器”选项卡
2)Double-click Tomcat Server 2)双击Tomcat服务器
3)On General Information section,click open launch configuration. 3)在“常规信息”部分,单击“打开启动配置”。
4)Go to Classpath tab and add the jdbc jar file. 4)转到Classpath选项卡并添加jdbc jar文件。
Hope this works..Worked for me. 希望这个有用......为我工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM