我有一个Spring + Hibernate + JPA应用程序。我有一个在persistence.xml中定义的defaultPersistance
单元
<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连接的entityManagerFactory
和transactionManager
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
因此,我的问题是:如何更改hibernate连接属性(例如。hibernate.connection。(用户名)在运行时?
发布于 2014-05-26 00:38:03
我将考虑在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()
时,都会根据当前线程检查凭据,并使用这些凭据来获取连接。
https://stackoverflow.com/questions/23863401
复制相似问题