我正在使用Google App Engine JAVA 8和Servlet 3.1,并希望使用HikariCP进行池化。
为了更好的理解,我将用伪代码编写逻辑。
此时,当用户连接到servlet时,每次都会创建到数据库的新连接。
所以我的servlet看起来像这样
doGet(){
DatabaseObject db = new DatabaseObject()
Connection conn = db.getConnection()
db.createTable(conn)
db.readData(conn)
...
conn.close()
}
现在,我已经看到许多像this one这样的池化示例 但是首先我不确定这是我要实现的目标,我也不是很了解整个过程
任何示例,欢迎解释,因为我尝试搜索网络并且找不到一些servlet。所以也许我在想错方向
答案 0 :(得分:1)
该示例看起来像是将池存储在应用程序(servlet)上下文中。
我做了不同的事情。通常我创建一个类,将其称为MyDb。然后,我向其中添加了各种方法来访问数据。其中有一个getConnection()方法。
在内部,MyDb具有自己的连接池。 getConnection()只是从池中返回一个连接。创建第一个MyDb时初始化池。
这样的事情(这是针对应用引擎的,因此未指定端口):
private static DataSource pool = null;
public MyDb( String dbhost, String dbdsn, String dbuid, String dbpwd )
{
try
{
if( MyDb.pool == null )
{
String dbconn = null;
String dbclassname = null;
HikariConfig config = new HikariConfig();
dbconn = "jdbc:google:mysql://" + dbhost + "/" + dbdsn;
dbclassname = "com.mysql.jdbc.GoogleDriver";
config.setJdbcUrl( dbconn );
config.setUsername( dbuid );
config.setPassword( dbpwd );
MyDb.pool = new HikariDataSource( config );
}
catch( Exception e )
{
logger.error( e.getMessage() );
}
}
protected Connection getConnection() throws Exception
{
return pool.getConnection();
}
}