SpringBoot+HikariCP部署JBoss EAP:连接池疑问与选型建议
部署SpringBoot+HikariCP到JBoss EAP的连接池问题解析
1. HikariCP会不会基于JBoss的连接池管理?
不会,两者是完全独立的层级:
- 要是你的SpringBoot应用用
spring.datasource.url这类配置直接连接数据库(默认依赖HikariCP),Hikari会在应用内部创建独立的连接池,和JBoss的容器级连接池没有关联。 - 只有当你配置应用通过JNDI引用JBoss的容器数据源(比如
spring.datasource.jndi-name=java:/jboss/datasources/YourDB),SpringBoot才会使用JBoss的连接池,此时HikariCP默认不会生效。
2. 连接池容量会叠加吗?
如果你的应用不小心同时启用了两层连接池(比如既配置JDBC URL让Hikari自建池,又让Hikari包装JBoss的容器数据源),连接数确实会叠加——Hikari从JBoss的池里获取连接后再维护自己的应用级缓存,属于资源的双重占用。你通过APM观察到的叠加情况,就是这种配置不当导致的,并非正常状态。
3. 同时使用应用级与服务器级连接池是否常见?
非常少见,而且属于强烈不推荐的做法:
- 双层连接池会额外消耗系统资源,还容易引发连接泄漏、资源耗尽等问题。
- JBoss的容器级连接池本身具备成熟的连接管理、监控、事务集成能力,重复使用应用级池纯属冗余。
- 应用级池脱离容器管控,无法利用JBoss提供的数据源监控、全局事务管理等特性。
4. 部署前是否需要移除HikariCP?
分两种情况处理:
- 推荐使用JBoss容器级连接池:必须移除HikariCP依赖,或者在配置中明确禁用它,改为通过JNDI引用容器数据源。比如在
application.properties中配置:
同时在Maven中排除HikariCP依赖:spring.datasource.jndi-name=java:/jboss/datasources/YourDB spring.datasource.type=javax.sql.DataSource<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions> </dependency> - 坚持使用应用级HikariCP:可以保留依赖,但必须确保应用未引用JBoss的容器数据源,避免出现双层池。不过这种做法会放弃容器级连接池的优势,仅适合极端特殊场景。
内容的提问来源于stack exchange,提问作者hung pill Yum
相关产品推荐
相关产品推荐

