You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot应用无法连接Oracle数据库,IntelliJ控制台可正常连接

SpringBoot应用无法连接Oracle,但IntelliJ数据库控制台可以连接

问题描述

我能够通过IntelliJ数据库控制台正常连接Oracle数据库,但SpringBoot应用尝试连接时出现TCP连接超时错误。

应用配置

spring.datasource.url=jdbc:oracle:thin:@192.168.00.00:1521:ORCL
spring.datasource.username=
spring.datasource.password=password

代码实现

@Autowired
private JdbcTemplate jdbcTemplate;

@GetMapping("/api/bears/{empId}")
public int BearsCall(@PathVariable String empId) {
    final int[] r = {0}; // 使用数组让变量成为有效final
    // active , CWR , A : user_status, person_status, person_type
    // replace name with unique_identifier
    String userQuery = "SELECT extended1, extended2, extended3 " +
            "FROM identityiq.spt_identity " +
            "WHERE name = ?";
    String hasRole = "SELECT COUNT(*) AS role_count " +
            "FROM identityiq.spt_identity_assigned_roles i " +
            "JOIN identityiq.spt_bundle b ON i.bundle = b.id " +
            "JOIN identityiq.spt_identity u ON i.identity_id = u.id " +
            "WHERE u.name = ? " +
            "AND b.name = 'Role - Baseline Standard Access User'";
    try {
        // 查询用户
        Object[] params = {empId};
        jdbcTemplate.query(userQuery, params, (ResultSet rs) -> {
            if (rs.next()) {
                String adStatus = rs.getString("extended2") != null ? rs.getString("extended2") : "Unknown";
                if (!adStatus.equalsIgnoreCase("unknown")) {
                    // 查询角色数量
                    int roleCount = jdbcTemplate.queryForObject(hasRole, Integer.class, empId);
                    if (roleCount > 0) {
                        r[0] = 2;
                    }
                } else {
                    r[0] = 1;
                }
            } else {
                r[0] = 0;
            }
        });
    } catch (Exception e) {
        // 处理异常
        e.printStackTrace();
    }
    return r[0];
}

错误信息

java.sql.SQLTimeoutException: ORA-12170: 无法连接。主机192.168.00.00端口1521的TCP连接超时时间为30000ms。(CONNECTION_ID=h6LYhOpKQ6SXelYm+4==)
at oracle.jdbc.driver.T4CConnection.handleLogonNetException(T4CConnection.java:1382) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:975) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1126) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:104) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:825) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:651) ~[ojdbc8-23.3.0.23.09.jar:23.3.0.23.09]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:646) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:744) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:773) ~[spring-jdbc-5.3.15.jar:5.3.15]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:784) ~[spring-jdbc-5.3.15.jar:5.3.15]
at com.zephon.WebApp.controller.myController.BearsCall(myController.java:301) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.15.jar:5.3.15]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.15.jar:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Caused by: oracle.net.ns.NetException: ORA-12170: 无法连接。主机192.168.00.00端口1521的TCP连接超时时间为30000ms。(CONNECTION_ID=h6LYhOpKQ6SXelYm==)

排查解决步骤

  • 补全数据源用户名:配置中spring.datasource.username为空,IntelliJ连接时肯定填写了正确用户名,补上该项。
  • 修正JDBC URL格式:Oracle 12c及以后推荐使用服务名格式:jdbc:oracle:thin:@//192.168.00.00:1521/ORCL,原格式用冒号对应SID,确认Oracle实例的标识类型,和IntelliJ的配置保持一致。
  • 验证应用运行环境的网络连通性:在SpringBoot应用运行的机器上执行telnet 192.168.00.00 1521或nc -zv 192.168.00.00 1521,确认端口是否可达。
  • 延长连接超时时间:添加Hikari连接池配置spring.datasource.hikari.connection-timeout=60000,将超时时间延长到60秒,避免网络延迟导致超时。
  • 匹配JDBC驱动版本:确认项目依赖的ojdbc8版本和IntelliJ使用的驱动版本一致,同时Oracle服务器版本与驱动版本
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:22:12