近期在对老项目做升级和迁移,原数据库postgresql 9+druid 1.0.25 +spring jdbc 可以正常运行。 代码迁移到新服务器 ubuntu20.04 + postgresql 12 + druid 1.0.25 时就不行了,连接时提示Cannot open connection
本地代码启动也连接不了DB,尝试更换duid最新的1.1.24版本,使用DruidDataSource仍然Cannot open connection 我将druidDataSource更换为org.apache.commons.dbcp.BasicDataSource就可以启动并连接成功。
可以肯定DB没有IP/防火墙的限制,因为查询工具可以正常连接,本地其他连接方式的项目也可以启动并连接到新DB。
部分错误代码
信息: Initializing Spring root WebApplicationContext org.hibernate.exception.GenericJDBCException: Cannot open connection at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700) at org.hibernate.loader.Loader.doQuery(Loader.java:801) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) at org.hibernate.loader.Loader.doList(Loader.java:2533) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) at org.hibernate.loader.Loader.list(Loader.java:2271) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)
Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 10002, active 0, maxActive 20 at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1192) at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1014) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544) at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:831) at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4540) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:992) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:984) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:103) at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 74 more
spring 连接配置
org.postgresql.Driver jdbc:postgresql://ip:5432/xxxxx postgres postgres 20 5 10000 stats,log4j
原提问者GitHub用户allloveend
Druid连接PostgreSQL 12时报错Cannot open connection主要的原因有:
Druid版本过低
PostgreSQL JDBC驱动版本问题
数据库URL配置错误
用户名或密码错误
网络连接问题
PostgreSQL配置限制连接
检查数据库驱动程序:确保你在新服务器上使用的是适用于PostgreSQL 12的正确数据库驱动程序。不同的数据库版本可能需要不同的驱动程序版本。请检查你的项目依赖中的数据库驱动程序,并确保其版本与所使用的PostgreSQL数据库版本兼容。
检查数据库连接URL:确保你在连接配置中使用了正确的数据库连接URL。检查IP地址、端口号和数据库名称是否正确,并且没有其他的连接参数或错误。
检查数据库用户权限:确保你使用的数据库用户具有足够的权限连接到数据库。在迁移过程中,可能需要重新授予数据库用户所需的权限。
检查Druid连接池配置:Druid连接池具有一些特定的配置参数,可以影响连接的创建和使用。你可以检查Druid连接池的配置,特别是与连接池大小(maxActive)、最大等待时间(maxWait)和初始化连接数(initialSize)等相关的参数,确保它们适合你的应用程序需求。
检查服务器资源限制:在新服务器上,确保有足够的资源(CPU、内存等)可用于启动和运行应用程序。检查服务器的资源使用情况和限制,并确保应用程序能够获得足够的资源来创建和使用数据库连接。
如果你尝试了以上解决方案仍然无法解决问题,建议进一步检查日志文件或调试信息,查看是否有其他相关的错误或异常。此外,与你所使用的具体版本的Druid、Spring JDBC和PostgreSQL相关的问题可能需要参考相应的文档、问题跟踪系统或社区讨论,以获取更准确和详细的解决方案。
oh,我想我找到问题原因了。差异在postgresql的jdbc驱动版本,将这个项目的驱动版本换到42.2就可以了。 因为其他项目是将驱动放在tomcat中调用,而这个项目是放在lib下,项目使用了旧版本的jdbc驱动
原回答者GitHub用户allloveend
根据提供的信息,以下是可能导致连接问题的一些原因和解决方法:
数据库驱动版本不兼容:升级到新的服务器时,可能需要使用与PostgreSQL 12兼容的驱动程序版本。请确保您正在使用适用于PostgreSQL 12的最新版本的驱动程序。
Druid连接池配置问题:由于您更换了Druid版本,可能需要更新连接池的配置。检查Druid数据源的相关配置项,确保它们与新的服务器环境兼容。您可以参考Druid文档来获取正确的配置方式。
依赖项问题:升级项目时,还需确保所有依赖项都已正确配置和更新。例如,如果您升级了Spring版本,可能需要相应地更新其他相关库的版本。
数据库访问权限:请确保数据库用户具有足够的权限以连接到数据库。尽管查询工具可以正常连接,但仍可能存在某些权限限制。确保在应用程序中使用的数据库用户具有所需的权限。
网络设置问题:检查新服务器的网络设置,确保防火墙或其他网络配置未阻止从应用程序服务器到数据库服务器的连接。
综上所述,您可以尝试采取以下步骤来解决连接问题:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。