gpt4 book ai didi

java - 在运行时更改 persistenceUnit 属性

转载 作者:行者123 更新时间:2023-11-30 03:53:17 25 4
gpt4 key购买 nike

我有一个 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>

我在 mvc-dispatcher-servlet.xml 中连接了 entityManagerFactorytransactionManager:

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

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

所以我的问题是:如何在运行时更改 hibernate 连接属性(例如 hibernate.connection.username)?

最佳答案

我会考虑在 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() 时,都会根据当前线程检查凭据,并使用这些凭据来获取连接。

关于java - 在运行时更改 persistenceUnit 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com