Изменение свойств persistenceUnit во время выполнения

1

У меня есть приложение Spring MVC + Hibernate + JPA. У меня есть единица defaultPersistance, которая определена в файле persistence.xml:

<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
        <property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://localhost:1433;databaseName=B3;" />
        <property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
        <property name="hibernate.connection.username" value="hiber1" />
        <property name="hibernate.connection.password" value="hiber1" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
    </properties>
</persistence-unit>

У меня есть entityManagerFactory и transactionManager подключенный к mvc-dispatcher-servlet.xml:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

Поэтому я задаю вопрос: как я могу изменить свойства подключения hibernate (например, имя пользователя hibernate.connection) во время выполнения?

  • 0
    Почему вы хотите это сделать?
  • 0
    Когда вы говорите «время выполнения», вы имеете в виду, когда приложение работает или во время развертывания приложения?
Показать ещё 4 комментария
Теги:
spring
hibernate
jpa

1 ответ

2
Лучший ответ

Я бы рассмотрел возможность управления источником данных за пределами persistence.xml и использовать UserCredentialsDataSourceAdapter и его метод setCredentialsForCurrentThread.

Что-то вокруг этих строк:

    <bean id="targetDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"/>
        <property name="url" value="jdbc:jtds:sqlserver://localhost:1433;databaseName=B3;" />
    </bean>


   <bean id="dataSource" class="org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter"> 
      <property name="targetDataSource" ref="targetDataSource"/> 
      <property name="username" value="defaultUser"/> 
      <property name="password" value="mypassword" /> 
   </bean>

И в вашем java-коде вы получите ссылку на dataSource и вызовите setCredentialsForCurrentThread(username, password). Каждый раз, когда в источнике данных появляется метод getConnection(), учетные данные проверяются по текущему потоку и используются для получения соединения.

  • 0
    Спасибо Вам большое, я попробую это, похоже на решение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню