我正在尝试Dockerize Spring MVC应用程序,但无法从容器内连接到我的Oracle数据库。该应用程序使用连接池。使用ojdbc6_g.jar
时出现以下错误:
java.net.ConnectException: Connection refused
java.net.PlainSocketImpl.socketConnect(Native Method)
...
我的Dockerfile看起来像:
FROM tomcat:9
ENV JAVA_OPTS=-Duser.timezone=MST
ADD target/app.war /usr/local/tomcat/webapps
Spring Bean看起来像这样:
<bean class="org.apache.commons.dbcp2.BasicDataSource" name="ds">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:jack/sparrow@HOST:PORT/service" />
</bean>
有趣的是,如果我将用户名/密码更改为我知道不正确的内容,则错误会从&#34; Connection refused&#34;我期望的是:&#34;凭证无效&#34;。我使用SpringMVC:4.1.1与JdbcTemplate。为了解决问题,我尝试了以下简化代码:
import java.sql.*;
class TestOJDBC {
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:EXACT_SAME_CONNECT_STRING");
Statement s = conn.createStatement();
s.execute("SELECT 1 FROM DUAL");
s.getResultSet().next();
int i = s.getResultSet().getInt(1);
System.out.println("The integer received was: " + i);
}
}
使用此Dockerfile:
FROM openjdk:9
ADD ojdbc6.jar /usr/src/
ADD TestOJDBC.java /usr/src/
WORKDIR /usr/src/
RUN javac TestOJDBC.java
CMD ["java", "-classpath", ".:/usr/src/ojdbc6.jar", "TestOJDBC"]
有趣的是,这个最小的例子成功连接到数据库!
在Dockerize我的Oracle / SpringMVC应用程序时,有没有人对我有任何调试技巧?