2014-09-21 2 views
1

Я хочу создать программу, которая подключается к базе данных. Inprinciple, мой код работает. Я использую «Hibernante-4.3.1» и postgresql-driver «postgresql-9.3-1100.jdbc41.jar».Эффективный способ подключения к базе данных (по производительности)

Мой persistence.xml выглядит следующим образом:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence" version="1.0"> 
<persistence-unit name="******" transaction-type="RESOURCE_LOCAL"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
    <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> 
    <property name="hibernate.connection.username" value="******"/> 
    <property name="hibernate.connection.password" value="******"/> 
    <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/*******"/>   
    <property name="hibernate.hbm2ddl.auto" value="create"/>   
</properties> 
</persistence-unit> 
</persistence> 

Для локального хоста, это okeyishly быстро, но если я хочу подключиться к внешнему серверу через Интернет, это занимает около 30-60 секунд, чтобы установить соединение , После его инициализации все последующие запросы выполняются достаточно быстро, но первый вызов длится долго.

Я мог бы реструктурировать весь проект как WEB-проект и сделать JBoss Datasource через JTA. Таким образом, соединение устанавливается до запуска программы, и все будет хорошо. Но мне бы хотелось, чтобы это было намного больше, если бы мне не пришлось это делать. Каков правильный способ подключения?

Edit: Некоторые больше информации: линия, которая занимает много времени, является:

javax.persistence.EntityManagerFactory emf = Persistence.createEntityManagerFactory("OneGramService"); 

Привет, Rhodarus

+3

Это, кажется, далеко не по теме для нас. Я подозреваю, что вы нацелены на основной сайт StackOverflow. Пожалуйста, подтвердите это, и я буду мигрировать. –

+0

О, мне очень жаль, поэтому я нашел только текс-записи. Спасибо за миг. – Vertago

+0

Путь слишком широкий, чтобы ответить – Nabin

ответ

1

Попробуйте установить hibernate.temp.use_jdbc_metadata_defaults свойство ложным.

+0

Какие сетевые парни вы имеете в виду? Вверх/вниз по течению обеих сторон в порядке, но строка кода, похоже, не использует пропускную способность. Я добавил строку, которая занимает длительное время: javax.persistence.EntityManagerFactory emf = Persistence.createEntityManagerFactory («OneGramService»); – Vertago

+0

Вы пытались установить для свойства hibernate.temp.use_jdbc_metadata_defaults значение false? Вы также можете попробовать установить hibernate.hbm2ddl.auto для проверки. –

+0

Это! Большое спасибо очень много, в том числе: <Свойство Имя = значение «hibernate.temp.use_jdbc_metadata_defaults» = «ложь»> перерезать инициализации времени от 108 секунд до 6. Я столкнулся с проблемами с: < свойство name = "hibernate.hbm2ddl.auto" value = "validate" /> , потому что он сработает с чем-либо еще, чем «создать» или «обновить», но это для другого вопроса. Суть в том, что дефолты метаданных jdbc стали причиной трудоемких проблем. Редактирование-обновление: переход от создания к обновлению сократил время с 30 секунд до 6. – Vertago

Смежные вопросы