Linux:从Upstart调用的Java程序无法访问mysql数据库

时间:2015-08-18 01:43:35

标签: java mysql linux upstart

我正在处理一个简单的java后台进程,该进程处理来自套接字连接的数据,然后使用mysql连接器JDBC驱动程序建立与存储此信息的数据库的连接。我想使用upstart将程序用作服务,但是在初始化我的服务之后,在第一次上载尝试访问JDBC驱动程序以将数据插入数据库之后,进程将失败(在jdbc寄存器上没有失败,但是这是我监控输出的最佳假设,尽管我的日志中从不显示堆栈跟踪)。如果我从程序中的catch语句中删除了exit调用,我可以看到该过程不断接收上传,但实际上没有数据存储在mysql数据库中。

当从控制台正常运行java程序时,它会毫无问题地执行。下面的upstart .conf部分指向我可以毫无问题地运行的相同程序。

script

echo $$ > /var/run/uploadclient.pid
exec java -cp /user/server UploadProgram >> /home/user/upload.log

end script

之前有没有人听说过这样的问题?

1 个答案:

答案 0 :(得分:1)

想想我弄明白了...当通过upstart运行java程序时,它出于某种原因隐藏了stacktrack错误。这可以通过使用StringWriter和PrinterWriter捕获堆栈跟踪然后使用常规System.out.println()来打印错误来克服。

问题最终是因为即使原始类是使用jdbc连接器upstart编译的,也要求它在执行期间位于类路径中。

exec java -cp .:/user/jdbc.jar:/user/server UploadProgram >> /home/user/upload.log

解决了这个问题。