Spring Boot 1.2.5,Oracle 和 Hibernate 连接池
Spring Boot 1.2.5, Oracle and Hibernate connection pooling
我正在分析我的 Spring Boot 1.2.5 应用程序,发现性能很差。在负载相对较轻的情况下,提供一个简单的登录页面需要 4 秒以上(此时,JMeter 具有 500 个模拟用户)。
我正在使用 VisualVM 来尝试分析它。似乎 49% 的应用程序时间都花在了从 Hibernate 获取连接上:
org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection() 49.121124 4,450,911 ms (49.1%) 0.000 ms 4,573,860 ms 122,949 ms
为了缓解这种情况,我尝试启用连接池,但它似乎不起作用。我有:
将 C3P0 添加到我的依赖项中,所以我的 Hibernate 依赖项在我的 pom 中看起来像这样:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.3.Final</version>
</dependency>
此外,在我的 application.properties 文件中,我添加了:
spring.jpa.properties.hibernate.c3p0.min_size = 50
spring.jpa.properties.hibernate.c3p0.timeout = 300
我在文档中读到,如果我设置了任何 Hibernate C3P0 属性,那么连接池应该处于活动状态。
不过,我不确定是不是。当我启动 Spring 引导时,我看到的一些消息是:
2015-10-28 04:26:23.426 INFO 2182 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.3.Final}
2015-10-28 04:26:23.429 INFO 2182 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2015-10-28 04:26:23.431 INFO 2182 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2015-10-28 04:26:23.756 INFO 2182 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2015-10-28 04:26:24.207 INFO 2182 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
未找到的 "hibernate.properties" 是我关心的问题。我意识到它可能会发出该消息,即使它在 application.properties.
中找到了属性
我想知道,我是不是做错了什么,有没有办法验证连接池是否真的处于活动状态?
非常感谢...
在 Steve Waldman 的有益评论下,我完成了这项工作。对于任何感兴趣的人,由于我使用的是 Spring Boot 1.2.5.RELEASE,它基于 Spring 4.1.7.RELEASE,Hibernate 5 并不容易获得(尽管我致力于此)。
因此,要使其正常工作,请将其放入 pom:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.11.Final</version>
</dependency>
这些属性然后从 application.properties:
spring.jpa.properties.hibernate.c3p0.max_size 2000
spring.jpa.properties.hibernate.c3p0.min_size 100
spring.jpa.properties.hibernate.c3p0.timeout 5000
spring.jpa.properties.hibernate.c3p0.max_statements 1000
spring.jpa.properties.hibernate.c3p0.idle_test_period 3000
spring.jpa.properties.hibernate.c3p0.acquire_increment 2
spring.jpa.properties.hibernate.c3p0.validate false
spring.jpa.properties.hibernate.connection.provider_class = org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
spring.jpa.properties.hibernate.connection.url=jdbc:oracle:thin:@earth-db-11.mit.edu:1521:stardev
spring.jpa.properties.hibernate.connection.username=yourun
spring.jpa.properties.hibernate.connection.password=yourpw
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
如果您愿意,可以将属性放入 hibernate.properties 文件中,它们有点不同,如下所示:
hibernate.c3p0.max_size 2000
hibernate.c3p0.min_size 100
hibernate.c3p0.timeout 5000
hibernate.c3p0.max_statements 1000
hibernate.c3p0.idle_test_period 3000
hibernate.c3p0.acquire_increment 2
hibernate.c3p0.validate false
hibernate.connection.provider_class = org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
hibernate.connection.url=jdbc:oracle:thin:@earth-db-11.mit.edu:1521:stardev
hibernate.connection.username=yourun
hibernate.connection.password=yourpw
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
它对我的问题有帮助,尽管没有我希望的那么大。
我正在分析我的 Spring Boot 1.2.5 应用程序,发现性能很差。在负载相对较轻的情况下,提供一个简单的登录页面需要 4 秒以上(此时,JMeter 具有 500 个模拟用户)。
我正在使用 VisualVM 来尝试分析它。似乎 49% 的应用程序时间都花在了从 Hibernate 获取连接上:
org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection() 49.121124 4,450,911 ms (49.1%) 0.000 ms 4,573,860 ms 122,949 ms
为了缓解这种情况,我尝试启用连接池,但它似乎不起作用。我有:
将 C3P0 添加到我的依赖项中,所以我的 Hibernate 依赖项在我的 pom 中看起来像这样:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.3.Final</version>
</dependency>
此外,在我的 application.properties 文件中,我添加了:
spring.jpa.properties.hibernate.c3p0.min_size = 50
spring.jpa.properties.hibernate.c3p0.timeout = 300
我在文档中读到,如果我设置了任何 Hibernate C3P0 属性,那么连接池应该处于活动状态。
不过,我不确定是不是。当我启动 Spring 引导时,我看到的一些消息是:
2015-10-28 04:26:23.426 INFO 2182 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.3.Final}
2015-10-28 04:26:23.429 INFO 2182 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2015-10-28 04:26:23.431 INFO 2182 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2015-10-28 04:26:23.756 INFO 2182 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2015-10-28 04:26:24.207 INFO 2182 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
未找到的 "hibernate.properties" 是我关心的问题。我意识到它可能会发出该消息,即使它在 application.properties.
中找到了属性我想知道,我是不是做错了什么,有没有办法验证连接池是否真的处于活动状态?
非常感谢...
在 Steve Waldman 的有益评论下,我完成了这项工作。对于任何感兴趣的人,由于我使用的是 Spring Boot 1.2.5.RELEASE,它基于 Spring 4.1.7.RELEASE,Hibernate 5 并不容易获得(尽管我致力于此)。
因此,要使其正常工作,请将其放入 pom:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.11.Final</version>
</dependency>
这些属性然后从 application.properties:
spring.jpa.properties.hibernate.c3p0.max_size 2000
spring.jpa.properties.hibernate.c3p0.min_size 100
spring.jpa.properties.hibernate.c3p0.timeout 5000
spring.jpa.properties.hibernate.c3p0.max_statements 1000
spring.jpa.properties.hibernate.c3p0.idle_test_period 3000
spring.jpa.properties.hibernate.c3p0.acquire_increment 2
spring.jpa.properties.hibernate.c3p0.validate false
spring.jpa.properties.hibernate.connection.provider_class = org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
spring.jpa.properties.hibernate.connection.url=jdbc:oracle:thin:@earth-db-11.mit.edu:1521:stardev
spring.jpa.properties.hibernate.connection.username=yourun
spring.jpa.properties.hibernate.connection.password=yourpw
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
如果您愿意,可以将属性放入 hibernate.properties 文件中,它们有点不同,如下所示:
hibernate.c3p0.max_size 2000
hibernate.c3p0.min_size 100
hibernate.c3p0.timeout 5000
hibernate.c3p0.max_statements 1000
hibernate.c3p0.idle_test_period 3000
hibernate.c3p0.acquire_increment 2
hibernate.c3p0.validate false
hibernate.connection.provider_class = org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
hibernate.connection.url=jdbc:oracle:thin:@earth-db-11.mit.edu:1521:stardev
hibernate.connection.username=yourun
hibernate.connection.password=yourpw
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
它对我的问题有帮助,尽管没有我希望的那么大。