【发布时间】:2017-08-11 14:27:04
【问题描述】:
我使用 ballerina 0.91 并尝试使用 REST GET 服务来获取 Oracle 数据库上的一些数据。以下是在 sql:ClientConnector 上使用的 Oracle 信息。
service<http> MyService {
@http:GET {}
@http:Path {value: "/myService"}
resource apiGET (message m) {
string driverClass = "oracle.jdbc.driver.OracleDriver";
string dbURL = "jdbc:oracle:thin:@xxx:1521:yyy";
string username = "aaa";
string password = "bbb";
map propertiesMap = {"driverClassName":driverClass,"jdbcUrl":dbURL, "username":username, "password":password};
sql:ClientConnector myConnection = create sql:ClientConnector(propertiesMap);
<getting data from the database and prepare to send back to client>
message response = {};
messages:setJsonPayload(response, myData);
sql:ClientConnector.close(myConnection);
reply response;
}
}
因此,在每个 GET 中使用 DB 连接,我必须打开与数据库的连接并在最后再次关闭它。这很费时间。
另外,我可以在服务级别打开数据库连接,因此在 GET 之外,这将打开一次数据库连接,在 GET 内我总是可以使用数据库。这非常快,并且在 Composer 中运行服务时一切正常,即使我多次将 GET 与一些客户端并行使用,我也不会用完数据库连接。 但是当我编译服务时,我将服务运行为
ballerina run -s myService.balx
所以我的数据库连接用完了,我得到了一些异常。
我如何以某种方式将数据库连接池化,以便我可以为每个 GET 重用一个连接,并在完成 GET 之前将它发送回池。 服务关闭时如何关闭数据库连接?
欢迎任何一般性的设计提示。
【问题讨论】:
标签: ballerina