当前,我们有一个使用Tomcat context.xml文件中的数据源配置的应用程序。因此,我们能够通过检索JNDI名称并获得连接来成功获得连接。我想知道是否可以通过使用Spring数据源替换它,是否仍然需要context.xml文件中的信息?
示例“ context.xml”:
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/myDataSource" auth="Container" type="javax.sql.DataSource" username="john" password="doe" driverClassName="<removed>" url="<removed>" maxActive="30" maxIdle="10" maxWait="1000" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true"/> </Context>
因此,在我们的代码中,我们搜索这样的JNDI上下文:
Context envCtx = (Context) initCtx.lookup(..); DataSource ds = (DataSource) envCtx.lookup(..); Connection connection = ds.getConnection();
我想知道我们是否可以更好地定义Spring Datasource而不是使用这种方法,以及如何做到这一点?
我假设您dataSource的配置现在与此类似:
dataSource
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>
如果您将其替换为以下内容:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://${jdbc.hostname}/${jdbc.schema}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
DataSource 不再需要 在Tomcat中进行配置。
DataSource
在第一种情况下,连接池由Tomcat使用其自己的实现进行管理和公开。后一种配置(由于可移植性和减少对容器的依赖性而强烈建议使用)不依赖Tomcat。相反,Spring实例化了自己的连接池(请注意,池实现来自外部库,如DBCP或C3P0),并且绝对没有对Tomcat JNDI参考的引用。