Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时更改persistenceUnit属性_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 在运行时更改persistenceUnit属性

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> &

我有一个SpringMVC+Hibernate+JPA应用程序。 我有一个
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()
时,都会根据当前线程检查凭据,这些凭据用于获取连接。

为什么要这样做?当您说运行时,是指应用程序正在运行时,或者在应用程序部署期间?我的意思是我想在应用程序运行时更改它。我需要它对不同数据库用户下的数据库进行身份验证。您需要更改哪些属性?只有用户名吗?如果您需要切换身份验证,可能应该是每个线程一个,而不是全局。你不应该看那个,而是一个定制的
数据源
包装器。非常感谢你,我会试试这个,它看起来像一个解决方案!