网站升级公告模板,python 爬虫 做网站,域名服务器有哪些,营销型企业网站诊断我们都知道#xff0c;无论何时连接到数据库#xff0c;都需要使用连接池。 所有使用JDBC 4类的现代驱动程序都支持它。 在本文中#xff0c;我们将概述Spring应用程序中的连接池#xff0c;以及如何在非JEE环境#xff08;例如测试#xff09;中处理相同的上下文。 在S… 我们都知道无论何时连接到数据库都需要使用连接池。 所有使用JDBC 4类的现代驱动程序都支持它。 在本文中我们将概述Spring应用程序中的连接池以及如何在非JEE环境例如测试中处理相同的上下文。 在Spring大多数连接数据库的示例都是使用DriverManagerDataSource完成的。如果您没有正确阅读文档那么您将错过非常重要的一点。 注意 此类不是实际的连接池 它实际上并不合并连接。 它只是对成熟的连接池的简单替代实现了相同的标准接口但是在每个呼叫上都创建了新的Connections。 对于J2EE容器外部的测试或独立环境很有用可以作为相应ApplicationContext中的DataSource bean也可以与简单的JNDI环境结合使用。 假定使用池的Connection.close调用将简单地关闭Connection因此任何可识别DataSource的持久性代码都应起作用。 是的默认情况下spring应用程序不使用池连接。 有两种方法可以实现连接池。 取决于谁在管理池。 如果您在JEE环境中运行则最好使用容器。 在非JEE设置中有一些库可以帮助应用程序管理连接池。 让我们在下面详细讨论它们。 1.服务器容器管理的连接池使用JNDI 当应用程序连接到数据库服务器时建立物理实际连接所花费的时间远远超过了脚本的执行。 连接池是数据库供应商率先采用的一种技术它允许多个客户端共享一组提供对数据库资源访问权限的缓存的连接对象。 JavaWorld文章对此进行了很好的概述。 在J2EE容器中建议使用容器提供的JNDI数据源。 这样的数据源可以通过JndiObjectFactoryBean在Spring ApplicationContext中作为数据源bean公开以实现与此类之类的本地数据源bean之间的无缝切换。 以下文章帮助我在JBoss AS中设置数据源。 DebaJava发布 JBoss安装指南 JBoss维基 下一步是使用服务器从应用程序创建的这些连接。 如文档中所述您可以为此使用JndiObjectFactoryBean 。 如下所示 bean iddataSource classorg.springframework.jndi.JndiObjectFactoryBeanproperty namejndiName valuejava:/my-ds/
/bean 如果要使用springs“ SpringJUnit4ClassRunner”编写任何测试则将无法加载上下文因为JNDI资源将不可用。 对于测试您可以通过Spring的SimpleNamingContextBuilder设置模拟JNDI环境或者将Bean定义切换到本地DataSource因此更简单。 当我在寻找一个很好的解决方案我不想为测试提供单独的上下文时这个SO答案对我有所帮助。 它很好地利用了Javadoc中给出的各种技巧。 上述解决方案的问题是重复创建JNDI连接的代码。 我已经使用自定义的运行器SpringWithJNDIRunner解决了它。 此类将JNDI功能添加到SpringJUnit4ClassRunner。 它从类路径中的“ test-datasource.xml”文件中读取数据源并将其绑定到名称为“ java/ my-ds”的JNDI资源。 执行此代码后JNDI资源可用于弹簧容器使用。 import javax.naming.NamingException;import org.junit.runners.model.InitializationError;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** This class adds the JNDI capabilities to the SpringJUnit4ClassRunner.* author mkadicha* */
public class SpringWithJNDIRunner extends SpringJUnit4ClassRunner {public static boolean isJNDIactive;/*** JNDI is activated with this constructor.* * param klass* throws InitializationError* throws NamingException* throws IllegalStateException*/public SpringWithJNDIRunner(Class? klass) throws InitializationError,IllegalStateException, NamingException {super(klass);synchronized (SpringWithJNDIRunner.class) {if (!isJNDIactive) {ApplicationContext applicationContext new ClassPathXmlApplicationContext(test-datasource.xml);SimpleNamingContextBuilder builder new SimpleNamingContextBuilder();builder.bind(java:/my-ds,applicationContext.getBean(dataSource));builder.activate();isJNDIactive true;}}}
}beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdbean iddataSourceclassorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName value /property nameurl value /property nameusername value /property namepassword value //bean/beans 要使用此运行器您只需在测试中使用注释RunWithSpringWithJNDIRunner.class 。 此类扩展了SpringJUnit4ClassRunner因为RunWith批注中只能有一个类。 一个测试周期仅创建一次JNDI。 此类为问题提供了一种干净的解决方案。 2.应用程序管理的连接池 如果您需要J2EE容器之外的“真实”连接池请考虑使用Apache的Jakarta Commons DBCP或C3P0。 Commons DBCP的BasicDataSource和C3P0的ComboPooledDataSource是完整的连接池bean支持与此类相同的基本属性以及特定的设置例如最小/最大池大小等。 下面的用户指南可以帮助您进行配置。 Spring文件 C3P0用户指南 DBCP用户指南 以下文章介绍了配置连接池的一般准则和最佳实践。 关于Spring JDBC连接池的问题 MS SQL Server 2008中的连接池最大大小 如何确定最大连接数 监视SQL Server 2008中的活动连接数 翻译自: https://www.javacodegeeks.com/2014/03/integration-testing-for-spring-applications-with-jndi-connection-pools.html