Я разрабатываю приложение RESTful в Bluemix. Когда я запускаю свое приложение и отправляю запрос @GET в службу JAX-RS, он работает почти в несколько первых запросов, но через некоторое время он начинает возвращать ошибку. После того, как я увидел, журналы, я обнаружил эту ошибку:Bluemix, Connection отказался после нескольких удаленных соединений
com.ibm.db2.jcc.am.io: DB2 SQL Error: SQLCODE=-438, SQLSTATE=42502, SQLERRMC=Connection refused, DRIVER=3.57.82
Это код, который я использую, чтобы получить соединение, и я, конечно, закрыть его после того, как я сделал свою работу.
Gson gson = new Gson();
JsonObject vcap_services_obj = null;
Connection conn = null;
String driver = "com.ibm.db2.jcc.DB2Driver";
try {
Class.forName(driver);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String icap_services_string = System.getenv("VCAP_SERVICES");
if(icap_services_string == null){
icap_services_string = FileProvider.readFile("db.ini");
}
if (null != icap_services_string && icap_services_string.length() > 0) {
vcap_services_obj = gson.fromJson(icap_services_string, JsonObject.class);
}
if (null != vcap_services_obj) {
JsonArray vcap_services_array = vcap_services_obj.getAsJsonArray("sqldb");
JsonObject first_db2 = vcap_services_array.get(0).getAsJsonObject();
JsonObject first_credential = first_db2.get("credentials").getAsJsonObject();
String host = first_credential.get("host").getAsString();
String port = first_credential.get("port").getAsString();
String uid = first_credential.get("username").getAsString();
String pwd = first_credential.get("password").getAsString();
String dbname = first_credential.get("db").getAsString();
String dburl = "jdbc:db2:"+"//" + host + ":" + port + "/" + dbname;
try {
conn = DriverManager.getConnection(dburl, uid, pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return conn;
Что может быть причиной такого поведения? Спасибо.
UPDATE Проблема заключалась в том, что я открывал связи с другими методами и не закрывали их. Спасибо Jeeva T за помощь.
Я использую бесплатный план. Мой рабочий процесс следующий, получите соединение, используя приведенный выше код. Выполните требуемые SQL-запросы и затем закройте соединение с методом, который запросил это соединение. Что касается строки подключения, да, я видел ее, но я получил этот код из примера и отлично поработал в другом проекте, и я не пытался его оптимизировать. – Anatoly
Знаете ли вы, сколько соединений вы получаете за ошибку? Свободный план ограничен 10 соединениями. Если вы можете непрерывно воспроизводить его после сбоя X раз, возможно, что-то происходит с закрытием. Вы пробовали войти в систему? Стандартные функции открытия/закрытия являются асинхронными. Взгляните на https://www.npmjs.com/package/ibm_db. Вы можете попросить функции синхронизации. –
Это гораздо меньше, чем 10 соединений, это как 2-3 соединения. – Anatoly