我不是每个数据库查询都会得到以下错误,但每个查询的随机概率约为1%。无论查询是什么,它可以成功执行,然后在同一查询上失败。
只有当我将我的应用程序作为tomcat web app运行时才会出现错误。单元测试或独立应用程序模式(SpringApplication.run()
)不会失败。
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost
:5432/db_name
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:630)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:909)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:970)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:980)
at package.MyDBService.insert(MyDBService.java:32)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/db_name?tcpKeepAlive=true
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 15 more
我使用tomcat8和Spring。
@Configuration
public class JdbcFactory {
@Bean
public JdbcTemplate jdbcTemplate() {
Class.forName("org.postgresql.Driver");
return new JdbcTemplate(new DriverManagerDataSource("jdbc:postgresql://localhost:5432/db_name?tcpKeepAlive=true", "user", "pass"));
}
}
这就是我典型的DAO的样子
@Service
public class CommonDAO {
@Autowired JdbcTemplate jdbc;
public String getSome() {
return jdbc.query("...");
}
}
JDBC驱动程序作为maven依赖项提供。
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
没有其他数据库连接配置。
答案 0 :(得分:2)
很难说这到底发生了什么。您可能在应用程序和数据库之间存在关于网络的问题。此外,Tomcat不打算使用WEB-INF / lib中的JDBC驱动程序,驱动程序注册过程将导致类加载器问题。
使用连接池会有很大帮助。您将大幅减少创建连接的数量,您可以将其配置为在使用之前测试连接,因此如果您确实得到了错误的连接,它将被丢弃并替换。它也将更快,因为它将重用现有的连接。
Configure a dataSource in Tomcat,并将JDBC驱动程序jar放在Tomcat共享库中。