2017-08-11 138 views
1

我用芭蕾舞0.91,并尝试做一个REST获得服务为获得在Oracle DATABSE一些数据。以下是使用sql:ClientConnector的Oracle信息。WSO2芭蕾舞女演员使用DB连接与服务

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连接,所以到外面,这将打开数据库连接一次,并且得到我可以一直使用DB内。这是非常快,在运行里面的服务作曲家一切工作正常,即使我用并行数次一些客户搞定了,我不跑了DB联系。 但是当我编译服务的我运行服务为

ballerina run -s myService.balx 

所以我用完DB联系,我也得到了一些异常。

我该如何汇集数据库连接的方式,以便我可以重用每个GET的连接,并在完成GET之前将其发送回池。 服务关闭时如何关闭数据库连接?

任何一般的设计暗示是值得欢迎的。

回答

0

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]中被报告为一个问题。

[1] https://github.com/ballerinalang/ballerina/issues/3222

+0

你好,谢谢你的回应,我现在使用的0.92和改变根据新的规范我的代码。至于在作曲家中使用它,它工作正常,并且使用编译(balx)版本编写时遇到了一些问题,所以期待修复。 – Igor

+0

嗨,上面的问题已经修复。你可以检查0.95版本吗? –