前提
Eclipseで簡単なJavaアプリを作成し、VPS上にデプロイしたのですが、データベースにアクセスできず困っています。
具体的な症状としては
・ アカウント情報をDBに登録しているが、ログイン画面で、登録済みのID,パスワードを入力してもログインできない
とった感じです。
EclipseのTomcatサーバーで実行した際は、問題なくデータベースにアクセスできていました。
環境
VPS
・さくらのVPS
・OS:CentOS Linux release 7.8.2003
JDK
・バージョン:1.8.0_262
Tomcat
・バージョン:apache-tomcat9.0.37
DB
・H2 Database
・URL(jdbc:h2:tcp://localhost/~/testJavaApp)
DAOクラスのコード
Java
1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import model.Account; 10import model.User; 11 12public class AccountDAO { 13 //データベース接続に使用する情報 14 private final String JDBC_URL = "jdbc:h2:tcp://localhost/~/testJavaApp"; 15 private final String DB_USER = "sa"; 16 private final String DB_PASS = ""; 17 18 public Account findByLogin(User user) { 19 Account account = null; 20 21 //データベースへ接続 22 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) { 23 24 ~以下略~
接続を試みた時に表示されたエラー
catalina.out
1java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp 2 at java.sql.DriverManager.getConnection(DriverManager.java:689) 3 at java.sql.DriverManager.getConnection(DriverManager.java:247) 4 at dao.AccountDAO.signupAccount(AccountDAO.java:55) 5 at model.SignupLogic.execute(SignupLogic.java:8) 6 at servlet.SignupServlet.doPost(SignupServlet.java:57) 7 at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) 8 at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 9 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 10 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 11 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 12 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 13 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 14 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 15 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 16 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 17 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 18 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 19 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) 20 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 21 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 22 at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431) 23 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 24 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 25 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) 26 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 27 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 28 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 29 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 30 at java.lang.Thread.run(Thread.java:748) 31java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/testJavaApp 32 at java.sql.DriverManager.getConnection(DriverManager.java:689) 33 at java.sql.DriverManager.getConnection(DriverManager.java:247) 34 at dao.AccountDAO.signupAccount(AccountDAO.java:55) 35 at model.SignupLogic.execute(SignupLogic.java:8) 36 at servlet.SignupServlet.doPost(SignupServlet.java:57) 37 at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) 38 at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 39 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 40 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 41 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 42 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 43 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 44 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 45 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 46 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 47 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 48 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 49 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) 50 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 51 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 52 at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:431) 53 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 54 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 55 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) 56 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 57 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 58 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 59 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 60 at java.lang.Thread.run(Thread.java:748) 61Caused by: java.net.ConnectException: Connection refused (Connection refused) 62 at java.net.PlainSocketImpl.socketConnect(Native Method) 63 at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 64 at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 65 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 66 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 67 at java.net.Socket.connect(Socket.java:607) 68 at org.h2.util.NetUtils.createSocket(NetUtils.java:103) 69 at org.h2.util.NetUtils.createSocket(NetUtils.java:83) 70 at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:115) 71 at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:431) 72 ... 33 more
やってみたこと
H2 Databaseのjarファイル「h2-1.4.199.jar」をtomcatのlibディレクトリに保存する。
コメント
今までQiitaの記事や動画等参考にしてがんばってみましたが、知識が圧倒的に不足しており、何が原因なのか判断できません。無い頭を振り絞り、「JDBC_URL」の「localhost」という部分が問題なのかと思い、色々いじってはみましたが、状況は全く好転せず・・・
設定を変更するたびにsystemctl restartしてはいますが、うまくいく気配が全くありません。
初心者のため質問に至らない点もあると思いますが、原因・解決策等ご教示いただければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。