有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

部署在Tomcat上的Java应用程序未连接到jdbcmysql

我正在尝试恢复我们的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的信息

我的catalina日志:

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

共 (3) 个答案

  1. # 1 楼答案

    我以前也遇到过同样的问题,并设法解决了它。 Apache需要额外的jdbc msql配置步骤。 首先,确保为SQL数据库设置了正确的授予权限

    接下来,遵循他的解决方案,该解决方案取自:http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat

    首先,安装。jar文件,它与$CATALINA_HOME/common/lib中的Connector/J一起提供,以便容器中安装的所有应用程序都可以使用它

    接下来,通过向$CATALINA_HOME/conf/server添加声明资源来配置JNDI数据源。定义web应用程序的上下文中的xml:

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

  2. # 2 楼答案

    尝试将JDBCJAR文件放入tomcat-dir/common/lib并重新启动Tomcat
    比较问题Managing libraries in Tomcat

    如果现在仍然有效,发布Tomcat日志文件的摘录,查找连接而不是jdbc作为关键字

  3. # 3 楼答案

    如果您使用Eclipse Java EE运行Tomcat,
    1) 转到服务器选项卡
    2) 双击Tomcat服务器
    3) 在常规信息部分,单击打开启动配置
    4) 转到Classpath选项卡并添加JDBCJAR文件
    希望这能奏效。。为我工作