无法创建PoolableConnectionFactory [JSP Servlet和MySQL]

ebdffaop  于 2024-01-04  发布在  Mysql
关注(0)|答案(2)|浏览(239)

出现以下错误:java.sql.SQLException: Cannot create PoolableConnectionFactory (Cannot open file:C:\AppServers\glassfish5\glassfish\domains\domain1/config/keystore.jks [Keystore was tampered with, or password was incorrect])
通过简单地在MySQL数据库连接上添加useSSL=false和在DBConnection类中添加JDBC_URL String来解决它。

数据库连接

  1. package data;
  2. import java.sql.*;
  3. import javax.sql.DataSource;
  4. import org.apache.commons.dbcp2.BasicDataSource;
  5. public class DBConnection {
  6. private static final String JDBC_URL = "jdbc:mysql://localhost:3306/course_management_system?zeroDateTimeBehavior=CONVERT_TO_NULL&useTimezone=true&serverTimezone=UTC";
  7. private static final String JDBC_USER = "root";
  8. private static final String JDBC_PASSWORD = "admin";
  9. private static BasicDataSource dataSource;
  10. public static DataSource getDataSource() {
  11. if (dataSource == null) {
  12. dataSource = new BasicDataSource();
  13. dataSource.setUrl(JDBC_URL);
  14. dataSource.setUsername(JDBC_USER);
  15. dataSource.setPassword(JDBC_PASSWORD);
  16. dataSource.setInitialSize(50);
  17. try {
  18. Class.forName("com.mysql.cj.jdbc.Driver");
  19. } catch (ClassNotFoundException ex) {
  20. ex.printStackTrace(System.out);
  21. }
  22. }
  23. return dataSource;
  24. }
  25. public static Connection getConnection() throws SQLException {
  26. return getDataSource().getConnection();
  27. }
  28. public static void close(ResultSet rs) {
  29. try {
  30. rs.close();
  31. } catch (SQLException ex) {
  32. ex.printStackTrace(System.out);
  33. }
  34. }
  35. public static void close(PreparedStatement stmt) {
  36. try {
  37. stmt.close();
  38. } catch (SQLException ex) {
  39. ex.printStackTrace(System.out);
  40. }
  41. }
  42. public static void close(Connection conn) {
  43. try {
  44. conn.close();
  45. } catch (SQLException ex) {
  46. ex.printStackTrace(System.out);
  47. }
  48. }
  49. }

字符串

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>mb</groupId>
  5. <artifactId>CourseManagementSystem</artifactId>
  6. <version>1.0</version>
  7. <packaging>war</packaging>
  8. <name>CourseManagementSystem</name>
  9. <properties>
  10. <maven.compiler.source>1.8</maven.compiler.source>
  11. <maven.compiler.target>1.8</maven.compiler.target>
  12. <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <failOnMissingWebXml>false</failOnMissingWebXml>
  15. <jakartaee>8.0</jakartaee>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>javax</groupId>
  20. <artifactId>javaee-api</artifactId>
  21. <version>${jakartaee}</version>
  22. <scope>provided</scope>
  23. </dependency>
  24. <dependency>
  25. <groupId>mysql</groupId>
  26. <artifactId>mysql-connector-java</artifactId>
  27. <version>8.0.22</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.apache.commons</groupId>
  31. <artifactId>commons-dbcp2</artifactId>
  32. <version>2.8.0</version>
  33. </dependency>
  34. </dependencies>
  35. <build>
  36. <plugins>
  37. <plugin>
  38. <groupId>org.apache.maven.plugins</groupId>
  39. <artifactId>maven-compiler-plugin</artifactId>
  40. <version>3.1</version>
  41. <configuration>
  42. <source>1.8</source>
  43. <target>1.8</target>
  44. <compilerArguments>
  45. <endorseddirs>${endorsed.dir}</endorseddirs>
  46. </compilerArguments>
  47. </configuration>
  48. </plugin>
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-war-plugin</artifactId>
  52. <version>2.3</version>
  53. <configuration>
  54. <failOnMissingWebXml>false</failOnMissingWebXml>
  55. </configuration>
  56. </plugin>
  57. <plugin>
  58. <groupId>org.apache.maven.plugins</groupId>
  59. <artifactId>maven-dependency-plugin</artifactId>
  60. <version>2.6</version>
  61. <executions>
  62. <execution>
  63. <phase>validate</phase>
  64. <goals>
  65. <goal>copy</goal>
  66. </goals>
  67. <configuration>
  68. <outputDirectory>${endorsed.dir}</outputDirectory>
  69. <silent>true</silent>
  70. <artifactItems>
  71. <artifactItem>
  72. <groupId>javax</groupId>
  73. <artifactId>javaee-api</artifactId>
  74. <version>${jakartaee}</version>
  75. <type>jar</type>
  76. </artifactItem>
  77. </artifactItems>
  78. </configuration>
  79. </execution>
  80. </executions>
  81. </plugin>
  82. </plugins>
  83. </build>
  84. </project>

错误

  1. CourseManagementSystem was successfully deployed in 316 milliseconds.|#]
  2. java.sql.SQLException: Cannot create PoolableConnectionFactory (Cannot open file:C:\AppServers\glassfish5\glassfish\domains\domain1/config/keystore.jks [Keystore was tampered with, or password was incorrect])
  3. at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:656)
  4. at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:534)
  5. at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:734)
  6. at data.DBConnection.getConnection(DBConnection.java:35)
  7. at data.UserDAO.list(UserDAO.java:30)
  8. at web.UserController.doGet(UserController.java:18)
  9. at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
  10. at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
  11. at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1540)
  12. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
  13. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:119)
  14. at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:611)
  15. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:550)
  16. at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
  17. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:114)
  18. at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
  19. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:199)
  20. at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
  21. at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
  22. at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
  23. at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
  24. at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
  25. at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
  26. at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
  27. at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
  28. at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
  29. at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  30. at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
  31. at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
  32. at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
  33. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
  34. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
  35. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
  36. at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
  37. at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
  38. at java.lang.Thread.run(Thread.java:748)
  39. Caused by: java.sql.SQLNonTransientConnectionException: Cannot open file:C:\AppServers\glassfish5\glassfish\domains\domain1/config/keystore.jks [Keystore was tampered with, or password was incorrect]
  40. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
  41. at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:70)
  42. at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:833)
  43. at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
  44. at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
  45. at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
  46. at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52)
  47. at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:357)
  48. at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:103)
  49. at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:652)
  50. ... 35 more
  51. Caused by: com.mysql.cj.exceptions.SSLParamsException: Cannot open file:C:\AppServers\glassfish5\glassfish\domains\domain1/config/keystore.jks [Keystore was tampered with, or password was incorrect]
  52. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  53. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  54. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  55. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  56. at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
  57. at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
  58. at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
  59. at com.mysql.cj.protocol.ExportControlled.getSSLContext(ExportControlled.java:550)
  60. at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:303)
  61. at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)
  62. at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:97)
  63. at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:333)
  64. at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:167)
  65. at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1350)
  66. at com.mysql.cj.NativeSession.connect(NativeSession.java:157)
  67. at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:953)
  68. at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
  69. ... 42 more
  70. Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
  71. at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:782)
  72. at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
  73. at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
  74. at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
  75. at java.security.KeyStore.load(KeyStore.java:1445)
  76. at com.mysql.cj.protocol.ExportControlled.getSSLContext(ExportControlled.java:530)
  77. ... 51 more
  78. Caused by: java.security.UnrecoverableKeyException: Password verification failed
  79. at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:780)
  80. ... 56 more
  81. |#]
  82. StandardWrapperValve[web.UserController]: Servlet.service() for servlet web.UserController threw exception
  83. java.lang.NullPointerException
  84. at data.DBConnection.close(DBConnection.java:40)
  85. at data.UserDAO.list(UserDAO.java:51)
  86. at web.UserController.doGet(UserController.java:18)
  87. at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
  88. at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
  89. at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1540)
  90. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
  91. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:119)
  92. at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:611)
  93. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:550)
  94. at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
  95. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:114)
  96. at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
  97. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:199)
  98. at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
  99. at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
  100. at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
  101. at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
  102. at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
  103. at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
  104. at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
  105. at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
  106. at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
  107. at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  108. at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
  109. at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
  110. at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
  111. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
  112. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
  113. at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
  114. at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
  115. at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
  116. at java.lang.Thread.run(Thread.java:748)
  117. |#]

解决方案

我解决了将useSSL=false添加到DB连接字符串的问题。

envsm3lx

envsm3lx1#

您的问题与NullPointerException无关。您的异常处理很糟糕,您需要修复它,这样您就不会再次感到困惑。
问题所在
您的异常处理方案归结为:“打印一些信息到标准输出并继续"。最后一点是问题所在:你的代码并没有考虑到每一行都可以简单地做一些事情,或者什么都不做,这取决于是否发生异常。因此,你的代码一直在滚动,因为事情并没有处于你预期的状态,所以会发生更多的错误。这些错误是完全无关的-它们不是问题所在,但它们阻塞了日志并使您感到困惑。
处理异常的正确策略是处理它们。“不管怎样,把它打印出来然后继续”不是处理它们。如果你不能处理它们,(这是常见的情况),那么就让异常冒泡吧。除非你能写出解决问题的代码,否则不要捕捉它。一个什么都不能处理的异常 * 应该 * 一路向上冒泡,卷起线,这是最好的解决方案,也是最少的代码,所以这是双赢的。
显然是要与数据库交互的方法应该声明为throws SQLException,而public static void main方法应该声明为throws Exception,这是允许的。
如果你以某种方式必须捕获一个检查过的异常,即使你不知道该怎么做(这是不好的),那么至少把; throw new RuntimeException("Unhandled", e);放在你的catch块中,而不是`e.printStackTrace(System.out)。

您的实际异常问题

您的mysql驱动程序试图加载一个损坏的密钥存储库。这是一个相当棘手的问题。
很可能您已经添加了配置(或者应用了默认配置),需要C:\AppServers\glassfish5\glassfish\domains\domain1/config/keystore.jks的密钥库文件-我认为问题不在于斜杠的混合(java通常理解得很好),但我敢打赌,该文件不存在。或者,你试图使它,一个异常发生,同样糟糕的异常处理导致你没有意识到密钥文件已经损坏。检查文件-它可能根本不存在,或者是0字节。(重新)生成它,或者修复配置。

展开查看全部
icnyk63a

icnyk63a2#

我通过在数据库URL中添加useSSL=false来解决这个问题。

相关问题