java - 将 Java .war 应用程序部署到 digital ocean Ubuntu

标签 java mysql eclipse tomcat

我在本地完成了一个 java 动态 Web 应用程序的构建,现在我正尝试将它部署到 Digital Ocean 上的一个 droplet 上。

我在我的服务器上安装了 jdk、mysql 和 tomcat,并使用从 eclipse 导出的 .war 文件部署了我的应用程序。我还复制了一个 mysql-connector-java 文件到/opt/tomcat/lib 文件夹。

但是当我在服务器上打开我的应用程序时,出现如下错误:

Error instantiating servlet class surveyExchange.my.SignUpServlet
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false.

我的代码是这样的:

static String url = "jdbc:mysql://localhost:3306/";
static String dbName = "UserInfo?useSSL=false";
static String driver = "com.mysql.jdbc.Driver";
static String userName = "root";
static String password = "******";
static Connection conn = null;

private static final long serialVersionUID = 1L;

/**
 * @throws SQLException 
 * @see HttpServlet#HttpServlet()
 */
public SignUpServlet() throws SQLException {
    super();
    conn = DriverManager.getConnection(url + dbName, userName, password);
}

这行有错误:

conn = DriverManager.getConnection(url + dbName, userName, password);

堆栈跟踪:

Exception
javax.servlet.ServletException: Error instantiating servlet class surveyExchange.my.SignUpServlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

Root Cause:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false
    java.sql.DriverManager.getConnection(DriverManager.java:596)
    java.sql.DriverManager.getConnection(DriverManager.java:215)
    surveyExchange.my.SignUpServlet.<init>(SignUpServlet.java:34)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    java.lang.Class.newInstance(Class.java:383)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

非常感谢您的耐心等待!!

最佳答案

回答问题的间接方式:Go with a datasource (但你可能会在那里遇到同样的问题,所以继续)

驱动在tomcat的lib/文件夹中应该没问题(不是在WEB-INF中,但是不管你做什么,请只把它放在一个位置)。

检查文件(以及所有目录,关于您用来运行 tomcat 的用户)的权限,并确保您的连接器实际上是一个 jar 文件,而不是仅包含 jar 的压缩下载文件。

我通常做的是 aptitude install libmysql-java 以确保我的版本与本地 mysql 匹配,然后 ln -s/usr/share/java/mysql-connector -java.jar/opt/tomcat/lib/

尝试连接之前尝试的另一个选项(每个应用程序运行一次就足够了):执行 Class.forName("com.mysql.jdbc.Driver");

此外,我认为最好将连接分配移至 servlet 的 init() 方法(并在 destroy() 中清理)或甚至使用 JNDI 连接 - 但这只是对上述答案的补充。

关于java - 将 Java .war 应用程序部署到 digital ocean Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36381276/

相关文章:

php - 像数组一样从数据库获取值

mysql - 临时 mysql 表的范围或指定表是临时的

eclipse 的数据库访问插件

java - maven eclipse :eclipse order of source folders get lost

java - 禁用 URL Spring Security JAVA 配置的 X-FrameOptions 响应 header

Java Print - 结束转义序列

java - 双击 jtable 中的 imageicon 会使 imageIcon 消失

mysql - 如何在 Ubuntu 中更新 phpMyAdmin?

java - 将 java 文件导出为可运行的 .jar

java - BigQuery - 如何使用 java API 迭代结果