使用c3p0在Spring中进行多用户登录
在我的应用程序中,我使用c3p0进行连接池。我在上下文文件中提供用户名和密码。配置如下:使用c3p0在Spring中进行多用户登录,spring,c3p0,Spring,C3p0,在我的应用程序中,我使用c3p0进行连接池。我在上下文文件中提供用户名和密码。配置如下: <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close"> <property name="driverClass" value="com.ibm.as400.access.AS
<bean id="datasource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close">
<property name="driverClass" value="com.ibm.as400.access.AS400JDBCDriver" />
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${username}" />
<property name="password" value="${password}" /> </bean>
当我的应用程序加载时,Spring使用这个用户名和密码建立了连接。
现在的问题是,如果任何其他用户直接使用我的登录页面使用他的配置文件登录,那么我想用新用户的连接替换Springs连接。因此,数据获取是用新用户的配置文件完成的,我的客户端不想在属性文件中更改。
请帮助我。在您的场景中,拥有连接池没有任何意义,因为每个会话都需要打开自己的连接
您最好在用户登录时打开一个连接,然后在会话范围内维护相同的连接。或者在每次需要时打开一个新连接,但这是您可能希望避免的额外开销。只是要小心资源泄漏。由于每个登录的用户都需要自己的连接,您需要将会话超时设置得非常低,以避免在放弃的会话中有大量打开的连接。好吧,但正如您所说,我不能使用Spring DI功能。因为Spring在创建entitymanager工厂对象时使用了我的连接,而当我们在Spring的上下文之外打开连接时,我该如何使用我的连接在spring的上下文中设置此连接我相信这是可以实现的,但它不是非常简单的,可能会涉及您的一些自定义组件。突然想到的一种方法是创建自己的会话范围的数据源实现,用于LocalContainerEntityManagerFactoryBean。在会话范围的自定义数据源中,需要手动创建和维护该用户会话的连接。