我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着 Spring 打开的 hibernate 连接不应超过 30 个。但此时我有88空着。如果我关闭或重新启动服务器,它会回落到接近 0。我对每个查询都使用 getJdbcTemplate()。
这是我的 spring-config.xml 的一部分
这是 dao 的部分(重命名)
@Repository
public class ExampleDAOImpl extends JdbcDaoSupport implements ExampleDAO {
@Autowired
public ExampleDAOImpl(DataSource dataSource) {
setDataSource(dataSource);
}
这是我从 MySQL 中的 show processlist 得到的结果(这里没有显示所有行,有 88 行)
+----------+------------+-------------------------------------------+------+---------+-------+----------------+---------------------
| Id | User | Host | db | Command | Time | State | Info db
+----------+------------+-------------------------------------------+------+---------+-------+----------------+-----------------------
| 21721763 | user | XXXXXXXX:60586 | db | Sleep | 10609 | | NULL db
| 21924432 | user | XXXXXXXX:59498 | db | Query | 0 | NULL | show processlist db
| 21924580 | user | XXXXXXXX:59702 | db | Sleep | 790 | | NULL db
| 21924722 | user | XXXXXXXX:60010 | db | Sleep | 790 | | NULL db
| 21924813 | user | XXXXXXXX:60131 | db | Sleep | 787 | | NULL db
| 21924819 | user | XXXXXXXX:60139 | db | Sleep | 786 | | NULL db
| 21924841 | user | XXXXXXXX:60156 | db | Sleep | 785 | | NULL db
| 21927089 | user | XXXXXXXX:56292 | db | Query | 1 | Opening tables | XXXXXXXX |
| 21927090 | user | XXXXXXXX:56295 | db | Query | 1 | Opening tables | XXXXXXXX |
88 rows in set (0.01 sec)
dao 方法示例
public String selectSomething(String text) throws IllegalArgumentException, DAOException {
return (String) getJdbcTemplate().queryForObject(SELECT_QUERY_1, new Object[] {text}, String.class);
}
尝试此配置,这是对 PROD 环境进行多次调整的结果:
Tôi là một lập trình viên xuất sắc, rất giỏi!