在JNDI级别或webapp级别连接池是否更有意义?例如,我可以创建在简单的javax.sql.DataSource正是如此:连接池或数据源?我应该把哪个放入JNDI?
<Context antiJARLocking="true">
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myDataSource" user="user" password="password" />
</Context>
,然后配置池春正是如此:
<bean id="myDataSource" class="com.mchange.v2.c3p0.DataSources"
factory-method="pooledDataSource">
<constructor-arg>
<jee:jndi-lookup jndi-name="java:comp/env/jdbc/myDataSource" />
</constructor-arg>
</bean>
或者,我可以直接配置在JNDI本身池:
<Resource name="jdbc/myDataSource"
auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClassName="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost/myDataSource"
user="user" password="password"
minPoolSize="3"
maxPoolSize="15"
maxIdleTime="5000"
idleConnectionTestPeriod="300"
acquireIncrement="3" />
离开此弹簧:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
在这两种情况下,myDataSource spring bean都是c3p0连接池数据源,但哪一个更好?我认为在JNDI中创建池是最有意义的,但缺点是必须将c3p0 lib推送到servlet容器级别,这可能会导致与现有servlet发生冲突(如果它们当前使用的是不同版本)。但是,将它放入JNDI意味着您的应用程序根本不必担心共享。你们都在想什么?
做吧你喜欢的方式,如果可以的话。如果可能的话,最好把它放在一个地方。 – EJP