Я профилирую приложение Spring Boot 1.2.5 и считаю, что производительность довольно плохая. Обслуживание простой страницы входа занимает более 4 секунд под то, что будет относительно легкой нагрузкой (на данный момент JMeter с 500 имитируемыми пользователями).Spring Boot 1.2.5, Объединение соединений Oracle и Hibernate
Я использую 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 зависимостей выглядеть в моем П:
<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, пул соединений должен быть активным.
Однако я не уверен, что это так. Когда я начинаю Весна Ботинок, некоторые из сообщений, которые я вижу, являются:
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.
Мне интересно, я сделал что-то неправильно и есть ли способ проверить, действительно ли пул соединений активен?
Большое спасибо ...
Я не думаю, что вы сделали что-нибудь, что на самом деле позволило бы c3p0. В зависимости от вашей установки вам может потребоваться заменить компонент Spring, который является источником данных вашего приложения (в c3p0 'ComboPooledDataSource'), или установить конфигурацию класса провайдера соединения hibernate param' connection.provider_class' в 'org.hibernate.connection.C3P0ConnectionProvider'. Если c3p0 настроен, библиотека будет регистрировать баннер и сообщение с длинным пулом в INFO при инициализации пула. –
Спасибо Стив, но я не полностью следую. Вы говорите, что я могу сделать это с помощью еще одной записи о собственности? В настоящее время это Spring 4.2, и все настроено с аннотациями; нет xml. Я @Autowired JdbcTemplate и не предоставлял свой собственный источник данных.Если мне это нужно, я просто не понимаю, как это сделать. –
Итак, я просто не очень разбираюсь в весенних сапогах. Но, судя по чистому угадыванию, я попробую 'spring.jpa.properties.hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider'. Опять же, вы должны увидеть запуск c3p0 в своих журналах, если вы разрешаете произвольные сообщения через INFO. (в противном случае вам может потребоваться настроить логгеров с префиксом 'com.mchange' libs для входа в INFO через любую используемую библиотеку журналов.) –