Java 在运行时更改persistenceUnit属性
我有一个SpringMVC+Hibernate+JPA应用程序。 我有一个Java 在运行时更改persistenceUnit属性,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个SpringMVC+Hibernate+JPA应用程序。 我有一个defaultpersistence单元,它在persistence.xml中定义: <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> &
defaultpersistence
单元,它在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>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
我的问题是:如何在运行时更改Hibernate连接属性(例如Hibernate?连接?用户名)? < P>我会考虑在代码外管理数据源>持久性.XML<代码>及其用法和方法。< /P> 围绕这些线:
<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(用户名、密码)
。每次对数据源调用getConnection()
时,都会根据当前线程检查凭据,这些凭据用于获取连接。为什么要这样做?当您说运行时,是指应用程序正在运行时,或者在应用程序部署期间?我的意思是我想在应用程序运行时更改它。我需要它对不同数据库用户下的数据库进行身份验证。您需要更改哪些属性?只有用户名吗?如果您需要切换身份验证,可能应该是每个线程一个,而不是全局。你不应该看那个,而是一个定制的数据源
包装器。非常感谢你,我会试试这个,它看起来像一个解决方案!