Настройка Hibernate для использования базы данных, имя которой неизвестно до времени выполнения - PullRequest
5 голосов
/ 17 февраля 2011

У меня есть веб-приложение, работающее на Java 6, Spring 2.5.6 и Hibernate 3.2.7. Теперь существует необходимость извлечения некоторых данных из нескольких баз данных, чьи имена не известны до времени выполнения. Каков наилучший способ добиться этого?

Я посмотрел, например, в статью на http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/,, но это, кажется, применимо только в ситуации, когда все конфигурации базы данных известны заранее.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Вы можете создать класс, который реализует org.hibernate.connection.ConnectionProvider. Затем в своем файле конфигурации Hibernate добавьте этот класс следующим образом:

<property name="hibernate.connection.provider_class">my.class.that.implements.ConnectionProvider</property>

Вы, вероятно, также хотите использовать разные sessionFactory для каждой базы данных. Можете ли вы предоставить больше информации о том, как ваше приложение узнает о соединениях с базой данных во время выполнения?

2 голосов
/ 18 февраля 2011

Поскольку структура базы данных одинакова для каждой базы данных (хотя их имена заранее не известны), я решил изменить ее, просто добавив имя базы данных в запрос в качестве параметра.Это позволяет избежать проблем с ресурсами и управлением при использовании нескольких фабрик сессий.

Дополнительная информация здесь: http://web.archive.org/web/20071011173719/http://hibernate.org/429.html

2 голосов
/ 17 февраля 2011

Вы можете выполнить настройку в коде Java, поэтому вы можете сделать это во время выполнения:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/session-configuration.html#configuration-programmatic

...