我正在研究亚马逊Linux的Amazon EC2实例,正好遵循this tutorial,但我无法弄清楚如何将Tomcat连接到MySQL。我的意思是这样做的吗?
我遍历了/usr/share/tomcat8
内的目录,并为每个目录遍历:
mysql-connector-java-5.1.45-bin.jar
放在目录app/index.jsp
javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver found for jdbc/foo"
/index.jsp
醇>
我在其他Java库中放置了一个Connector / J jar文件的副本,并将其添加到我的类路径中,尽管这种方法明显无效,因为Tomcat如何处理它的类路径。
我已尽可能地减少了我的代码,希望我所做的其他事情已经产生了这种现象作为副作用。由于不到50行的代码继续产生相同的错误,这可能不是这种情况,但从技术上讲,我还没有排除它。
/usr/share/tomcat8/webapps/app/index.jsp
<!DOCTYPE html>
<%@ page import="java.io.*, java.util.*, java.sql.*, javax.servlet.http.*, javax.servlet.*" @>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<% Class.forName("com.mysql.jdbc.Driver").getInstance(); /* for good measure */ %>
<html>
<body>
<sql:query dataSource="jdbc/foo" var="result">
SELECT name FROM Users;
</sql:query>
<c:forEach var="r" items="${result.rows}">
<c:out value="${r.name}"/><br/>
</c:forEach>
</body>
</html>
/usr/share/tomcat8/webapps/app/META-INF/context.xml
<?xml version="1.0" encoding="utf-8"?>
<Context>
<Resource name="jdbc/foo" auth="Container" type="javax.sql.DataSource" maxTotal="64"
maxIdle="16" maxWaitMillis="10000" username="user" password="password"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/foo"/>
</Context>
/usr/share/tomcat8/webapps/app/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true>
<request-character-encoding>UTF-8></request-character-encoding>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>Database connection</description>
<res-ref-name>jdbc/foo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
我的数据库在[{1}}上拥有'user'@'localhost' IDENTIFIED BY 'password'
用户SELECT
权限。数据库foo.*
有一个表foo
我很可能错过了一些愚蠢的东西,因为这是我第一次在我的本地机器之外的Tomcat上做任何事情(顺便说一下,这样做很好)。任何人都可以找到我做错的事吗? (除了我的调试过程本身:我完全清楚这是多么可怕。)
TL / DR:我已经尝试了很多东西,Tomcat仍然无法连接到我的EC2实例上的MySQL。要明确,因为我被指示将Users(email varchar(127) NOT NULL PRIMARY KEY, name varchar(127) NOT NULL);
放在不同的地方或询问我放在哪里:我已经尝试将其放在字面上的每个目录 {{ 1}}。
答案 0 :(得分:0)
尝试以下
选项1:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在tomcat lib文件夹中
选项2:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在应用程序“foo”的lib文件夹中
选项3:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在java类路径中。
答案 1 :(得分:0)
从技术上讲,您没有做错任何事情,我已经经历过(与tomcat和mysql相同的设置),并且在我这一边纠正了此问题,您可以通过让JSP数据库测试页不使用DataSource进行验证,问题是大多数 Amazon服务不支持开箱即用的东西:
根据上面的代码,包括Beanstalk在内的EC2缺少此功能:
解决方案之一是求助于:
JDBC DriverManager
创建JNDI数据源
参考文献: