我在使用 HikariCP 和 Google App Engine for JEE 时遇到问题。
尝试访问站点时,我有记录的错误:
com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Cannot connect to MySQL server on localhost:3,306.
如您所见,它在端口地址中添加了一个","。
我尝试向其发送完整的URL,但没有附加任何内容。 这是我的 Servlet 初始化类:
public class InitialServlet extends HttpServlet {
public static final String SEANCE_MANAGER = "SEANCE_MANAGER";
public static final String CLOUD_SQL_CONNECTION_NAME="";
public static final String DB_USER="test_db";
public static final String DB_PASS="password";
public static final String DB_NAME="dbname";
@Override
public void init(ServletConfig config) throws ServletException {
HikariConfig configs = new HikariConfig();
configs.setJdbcUrl("jdbc:mysql://localhost:3306/dbname");
configs.setUsername(DB_USER);
configs.setPassword(DB_PASS);
configs.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
configs.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
configs.addDataSourceProperty("useSSL", "false");
DataSource pool = new HikariDataSource(configs);
DataAccess dataAccess = new DataAccess(pool);
SeancesManager seancesManager = new SeancesManager(dataAccess);
config.getServletContext().setAttribute(SEANCE_MANAGER, seancesManager);
}
}
我该怎么做才能修复此错误? 谢谢
为了通过 Java 将 App Engine 与 Cloud SQL 连接,您可以遵循的文档中指定的官方连接的唯一区别是 setJdbcurl 的格式。
我知道这可能很牵强,但您可以尝试像这样格式化 setJdbcUrl 吗?
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
另外,请仔细检查连接变量,以防万一。
让我知道,如果它不起作用,我们将进行更多研究。
编辑:
您使用的是 SQL 代理吗?
如果使用 SQL 代理,请再次运行该命令,并确保正确指定端口。
这是我能想到的第一件事,您可以在何处指定端口,并且在您指定的命令中可能有一个","。
我想知道的另一件事是,您是否在任何地方覆盖或修改了端口号?我建议您检查一下,因为错误"3,306"是因为指定的端口是"3,306"。正常故障错误直接失败与 3306。