我有一个SQL数据库和一台运行java代码的机器来从中获取信息
机器一直在监听端口
起初我在每次查询后都关闭了连接,但延迟增加很多
所以我切换到永不关闭连接,现在连接在一段时间后关闭而没有用(尽管延迟很低)。
显然,解决方案介于从不关闭和始终关闭之间
处理与SQL数据库的连接的推荐启发式是什么?
现在我正在测试服务器,请求数量很少。当服务器运行时,用户将使用比现在使用的服务器更多的服务器。我无法预测多少。
答案 0 :(得分:1)
为您的用例使用任何连接池。如果您使用的是app服务器,则可以使用app server connection pool或使用opensource dbcp连接池机制。
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
dbcp configuration link
import org.apache.commons.dbcp2.BasicDataSource;
public class DataBaseUtility
{
private static BasicDataSource dataSource;
private static BasicDataSource getDataSource()
{
if (dataSource == null)
{
BasicDataSource ds = new BasicDataSource();
ds.setUrl("jdbc:mysql://localhost/test");
ds.setUsername("root");
ds.setPassword("password");
ds.setMinIdle(5);
ds.setMaxIdle(10);
ds.setMaxOpenPreparedStatements(100);
dataSource = ds;
}
return dataSource;
}
public static void main(String[] args) throws SQLException
{
try (BasicDataSource dataSource = DataBaseUtility.getDataSource();
Connection connection = dataSource.getConnection();
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM account");)
{
System.out.println("The Connection Object is of Class: "+connection.getClass());
try (ResultSet resultSet = pstmt.executeQuery();)
{
while (resultSet.next())
{
System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
}
}
catch (Exception e)
{
connection.rollback();
e.printStackTrace();
}
}
}
}