wso2 Ballerina 使用数据库连接与服务
wso2 Ballerina using DB Connections with Services
我使用 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 中使用数据库连接我必须打开到数据库的连接并在最后再次关闭它。这是很费时间的。
或者我可以在服务级别打开数据库连接,所以在 GET 之外,这将打开一次数据库连接,在 GET 内部我可以始终使用数据库。这非常快,并且在 运行 宁 Composer 内的服务一切正常,即使我多次使用 GET 与一些客户端并行,我也没有 运行 脱离数据库连接。
但是当我编译服务时,我 运行 服务作为
ballerina run -s myService.balx
所以我 运行 没有数据库连接,我得到了一些异常。
我怎样才能以某种方式合并数据库连接,以便我可以为每个 GET 重用一个连接,并在完成 GET 之前将其发送回池中。
如何在服务关闭时关闭数据库连接?
欢迎任何通用的设计提示。
SQL 客户端连接器默认创建大小为 10 的连接池。如果您需要更改池大小,您可以按以下方式传递属性。
sql:ConnectionProperties properties = {maximumPoolSize:5};
sql:ClientConnector testDB = create sql:ClientConnector(sql:MYSQL, "localhost", 3306, "db", "sa", "root", properties);
在服务级别声明连接器是正确的方法。然后,当您在 GET 中执行 SQL 操作时,它将从池中获取连接并执行。
显然在 .balx 文件中使用连接器时出现问题。这已被报告为 Github 存储库 [1] 中的一个问题。
我使用 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 中使用数据库连接我必须打开到数据库的连接并在最后再次关闭它。这是很费时间的。
或者我可以在服务级别打开数据库连接,所以在 GET 之外,这将打开一次数据库连接,在 GET 内部我可以始终使用数据库。这非常快,并且在 运行 宁 Composer 内的服务一切正常,即使我多次使用 GET 与一些客户端并行,我也没有 运行 脱离数据库连接。 但是当我编译服务时,我 运行 服务作为
ballerina run -s myService.balx
所以我 运行 没有数据库连接,我得到了一些异常。
我怎样才能以某种方式合并数据库连接,以便我可以为每个 GET 重用一个连接,并在完成 GET 之前将其发送回池中。 如何在服务关闭时关闭数据库连接?
欢迎任何通用的设计提示。
SQL 客户端连接器默认创建大小为 10 的连接池。如果您需要更改池大小,您可以按以下方式传递属性。
sql:ConnectionProperties properties = {maximumPoolSize:5};
sql:ClientConnector testDB = create sql:ClientConnector(sql:MYSQL, "localhost", 3306, "db", "sa", "root", properties);
在服务级别声明连接器是正确的方法。然后,当您在 GET 中执行 SQL 操作时,它将从池中获取连接并执行。
显然在 .balx 文件中使用连接器时出现问题。这已被报告为 Github 存储库 [1] 中的一个问题。