gpt4 book ai didi

java - 如何为 Web 服务创建连接池

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:11 24 4
gpt4 key购买 nike

作为前身,我是通过在线教程学习Java的,所以,请不要对我的问题太苛刻,如果我在这里问这个,那只是因为我不知道在哪里可以找到答案。

我需要编写一些简单的网络服务,所以我开始研究并找到了 Jersey 库,它暂时解决了我的问题。主要问题是每次我想访问数据库时,我都需要打开一个连接,所以我研究了连接池。

@Path ("login")
@Singleton
public class LoginWS{

private DataSource dataSource;
private Connection connection;
private Statement statement;

public LoginWS (){
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/testdb");
} catch (NamingException e) {
e.printStackTrace();
}
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String authUser(@HeaderParam(value = "data") String data) {
Gson parser = new Gson();
LoginInput user = parser.fromJson(data, LoginInput.class);
LoginOutput response = new LoginOutput();

try {
connection = dataSource.getConnection();
statement = connection.createStatement();

// Here I do the DB queries, and logic

} catch (SQLException e) {
e.printStackTrace();
}finally {
try { if(null!=resultSet)resultSet.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=statement)statement.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=connection)connection.close();} catch (SQLException e)
{e.printStackTrace();}
}
return parser.toJson(response);
}
}

如您所见,我需要在我需要构建的每个其他类中使用一个新的连接池,我不知道这是否是一个好的做法。所以我希望构建类似的东西:

public Connection getDBConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}

所以它会请求连接到连接池,所以我所有的网络服务都使用相同的池。我尝试了另一个返回 JSON 对象中的连接的 Web 服务,但是,我认为任何知道这个 WS 在哪里的人都可以访问我的数据库,这至少可以说是……不受欢迎的。

然后我读到一个名为 HttpServlet 的对象,我构建了这样的东西:

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L; // No idea about this. Eclipse's suggestion
private DataSource dataSource;

public void init() throws ServletException {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/testdb");
System.out.println("Connection Pool: set");
} catch (NamingException e) {
e.printStackTrace();
}
}

public Connection getDBConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}

立即购买,我不知道如何从我的 Web 服务中调用此实例。

老实说......我对要寻找的东西一无所知。

提前感谢您阅读本文。

最佳答案

如果您目前正在使用 Tomcat,明智的选择是将您的开发转移到 Glassfish 或其他 Java Enterprise Edition Server。 Tomcat 只是一个 Servlet/JSP 引擎,而 Glassfish 是一个完整的 Java EE 套件,不仅包括 Servlets/JSP 和 Jersey,还包括您正在寻找的连接池。

这里有许多教程向您展示在 Glassfish 中设置连接池是多么容易:

http://netbeans.dzone.com/connection-pooling-glassfish-nb

关于java - 如何为 Web 服务创建连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com