在运行时更改persistenceUnit属性

用户名

我有一个Spring MVC + Hibernate + JPA应用程序。我有一个defaultPersistancepersistence.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>

我有一个entityManagerFactorytransactionManager在有线MVC-调度-servlet.xml中

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

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

所以我的问题是:如何在运行时更改休眠连接属性(例如hibernate.connection。用户名)?

安德烈·斯特凡

我会考虑在外部管理数据源persistence.xml及其使用UserCredentialsDataSourceAdaptersetCredentialsForCurrentThread方法。

这些线周围的东西:

    <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()调用它时,都会针对当前线程检查凭据,并使用这些凭据获取连接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章