[英]java ldap connection pool timeout property not working as expected
在java LDAP连接池中,我注意到池超时设置属性无法正常工作。 下面给出了测试我的应用程序时的ldap连接池日志。
以下是initSize和池超时属性的值com.sun.jndi.ldap.connect.pool.initsize = 10
com.sun.jndi.ldap.connect.pool.timeout = 300000
==================== LDAP日志======================
21:38:48,480创建com.sun.jndi.ldap.LdapClient@e2d0ca3
21:38:48,480创建com.sun.jndi.ldap.LdapClient@4f652edf
21:38:48,495创建com.sun.jndi.ldap.LdapClient@53bb2d84
21:38:48,558创建com.sun.jndi.ldap.LdapClient@45766ee8
21:38:48,558创建com.sun.jndi.ldap.LdapClient@703c62f5
21:38:48,573创建com.sun.jndi.ldap.LdapClient@279dd5ca
21:38:48,589创建com.sun.jndi.ldap.LdapClient@51c329b8
21:38:48,605创建com.sun.jndi.ldap.LdapClient@7ec5afb0
21:38:48,605创建com.sun.jndi.ldap.LdapClient@3e3659c6
21:38:48,620创建com.sun.jndi.ldap.LdapClient@5bef29e1
21:38:48,620创建并使用com.sun.jndi.ldap.LdapClient@332bf735
21:38:50,102发布com.sun.jndi.ldap.LdapClient@332bf735
21:41:05,661已过期com.sun.jndi.ldap.LdapClient@e2d0ca3已过期
21:41:05,661已过期com.sun.jndi.ldap.LdapClient@4f652edf已过期
21:41:05,661已过期com.sun.jndi.ldap.LdapClient@53bb2d84已过期
21:41:05,661已过期com.sun.jndi.ldap.LdapClient@45766ee8已过期
21:41:05,662已过期com.sun.jndi.ldap.LdapClient@703c62f5已过期
21:41:05,693已过期com.sun.jndi.ldap.LdapClient@279dd5ca已过期
21:41:05,693已过期com.sun.jndi.ldap.LdapClient@51c329b8已过期
21:41:05,693已过期com.sun.jndi.ldap.LdapClient@7ec5afb0已过期
21:41:05,693已过期com.sun.jndi.ldap.LdapClient@3e3659c6已过期
21:41:05,709已过期com.sun.jndi.ldap.LdapClient@5bef29e1已过期
当应用程序请求第一个LDAP连接时,将创建10个新连接(初始大小设置为10)以及请求的连接。 将已使用的连接释放回池后,5分钟后不会过期,其他10个连接也是如此。 我不确定为什么ldap池超时属性不能正常工作,因为我在不同的时间测试相同的场景时会得到不同的行为(有时连接会在1分钟内到期)。 有没有人经历过同样的行为和解决方案?
最后,在我理解了连接池超时属性按照设计工作之后,我已经解决了这个问题。
我的第一个LDAP连接池是在16:36:04创建的。 因此,从那时起,池清洁工作将每5分钟运行一次。 因此,假设在此预定作业之前几秒或几分钟内创建了新的LDAP连接,它们将作为清理过程的一部分从池中删除。 因此,上述日志中显示的所有连接都在21:41:05过期,即使它们是在21:38:48创建的。
因此,不要指望只有在空闲时间为5分钟后才会从池中删除LDAP连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.