我有一个已部署在 Tomcat 服务器上的 Sparkjava 应用程序。它使用 SQL2O 与 MySQL 数据库交互。一段时间后,我开始无法连接到数据库。我试过直接从 SQL2O 连接,通过 HikariCP 连接和通过 JNDI 连接。在我开始获得Communications link failure
. 这个应用程序每天最多会被点击几次,所以性能完全不是问题。我想将应用程序配置为每个请求使用一个数据库连接。我该怎么做?
该应用程序在我重新部署之前不会再次上线(再次覆盖 ROOT.war)。重新启动 tomcat 或整个服务器什么都不做。
目前,每个请求都会创建一个新Sql2o
对象并使用withConnection
. 如果我泄露了任何连接,我会感到非常惊讶。
这是一些示例代码(简化)。
public class UserRepositry {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
protected Sql2o sql2o = new Sql2o("jdbc:mysql://mysql.server.name/dbname?serverTimezone=UTC", "username", "password");
public List<Users> getUsers() {
return sql2o.withConnection((c, o) -> {
return c.createQuery(
"SELECT\n" +
" id,\n" +
" name\n" +
"FROM users"
)
.executeAndFetch(User.class);
});
}
}
public class Main {
public static void main(String[] args) {
val gson = new Gson();
port(8080);
get("/users", (req, res) -> {
return new UserRepository().getUsers();
}, gson::toJson);
}
}