在 j2ee 应用程序的生命周期中,我需要处理 2 个单独的数据连接。一个人事先知道它的所有属性,我这样配置 myBatis
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/pooledDS" />
</dataSource>
</environment>
这很棒。PooledDS 指的是我的 c3p0 配置的数据源。第二个连接将使用用户登录应用程序时确定的用户名/密码组合创建。我想再次将 c3p0 用于该数据源,并尝试将 mybatis.xml 配置为
<environment id="user">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/pooledDS2" />
</dataSource>
</environment>
我在 Tomcat 的 context.xml 中对应的资源条目是
<Resource name="jdbc/pooledDS2" auth="Container"
description="DB Connection for Users"
driverClass="oracle.jdbc.driver.OracleDriver"
maxPoolSize="100" minPoolSize="10" acquireIncrement="1"
factory="org.apache.naming.factory.BeanFactory"
maxIdleTime="850"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:oracle:thin:@localhost:1521:orcl4" />
你看,我将用户和密码属性留空,因为我不知道它们。当我知道我需要连接的用户时,我尝试以下操作:
Reader reader = Resources.getResourceAsReader(RESOURCE);
Properties userProps = new Properties();
userProps.setProperty("user", loginName);
userProps.setProperty("username", loginName);
userProps.setProperty("password", password);
sqlMapperUser = new SqlSessionFactoryBuilder().build(reader, "user", userProps);
你看,当我得到我的 SqlSessionFactory 时,我尝试将用户名和密码作为属性对象传递。当我在 tomcat 中查看 c3p0 的日志消息时,我看到 c3p0 属性为空,显然它从未从 myBatis 那里听到用户名和密码是什么,因此无法建立连接。我知道我使用的是正确的“用户”环境,这只是我如何正确设置此连接的用户名和密码?谢谢你的帮助。