我有一个Jersey资源可以访问数据库。基本上它会在资源初始化时打开一个数据库连接。对资源的方法执行查询。何时在Jersey资源中使用@Singleton
我观察到,当我不使用@Singleton时,数据库正在每个请求打开。我们知道开通连接真的很贵吗?
所以我的问题是,我应该指定资源是单身或者是不是真的更好地保持在每个请求特别是当资源被连接到数据库?
我的资源代码如下所示:
//Use @Singleton here or not?
@Path(/myservice/)
public class MyResource {
private ResponseGenerator responser;
private Log logger = LogFactory.getLog(MyResource.class);
public MyResource() {
responser = new ResponseGenerator();
}
@GET
@Path("/clients")
public String getClients() {
logger.info("GETTING LIST OF CLIENTS");
return responser.returnClients();
}
...
// some more methods
...
}
我使用一个类似的代码连接到数据库:
public class ResponseGenerator {
private Connection conn;
private PreparedStatement prepStmt;
private ResultSet rs;
public ResponseGenerator(){
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection("jdbc:h2:testdb");
}
public String returnClients(){
String result;
try{
prepStmt = conn.prepareStatement("SELECT * FROM hosts");
rs = prepStmt.executeQuery();
...
//do some processing here
...
} catch (SQLException se){
logger.warn("Some message");
} finally {
rs.close();
prepStmt.close();
// should I also close the connection here (in every method) if I stick to per request
// and add getting of connection at the start of every method
// conn.close();
}
return result
}
...
// some more methods
...
}
上的代码的最佳做法有些意见也将是有益的。
连接池怎么样?你为什么不使用它? – 2010-05-01 09:17:52