Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
使用c3p0在Spring中进行多用户登录_Spring_C3p0 - Fatal编程技术网

使用c3p0在Spring中进行多用户登录

使用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

在我的应用程序中,我使用c3p0进行连接池。我在上下文文件中提供用户名和密码。配置如下:

<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。在会话范围的自定义数据源中,需要手动创建和维护该用户会话的连接。