- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
问题:
com.mchange.v2.c3p0.ComboPooledDataSource
连接到 Sybase 服务器runSQL1()
和 runSQL2()
两个方法runSQL1()
执行创建#temptable 的 SQL
SELECT * INTO #myTemp FROM TABLE1 WHERE X=2
runSQL2()
执行从这个 #temptable 中读取的 SQL
SELECT * FROM #myTemp WHERE Y=3
问题:runSQL2()
从池中获得了与传递给 runSQL1 的不同的数据库连接()
。
但是,Sybase #temptables 是特定于连接的,因此 runSQL2()
在找不到表时会失败。
我能想到的最明显的解决方案(除了使池大小为 1 的退化之一,此时我们甚至不需要池),是以某种方式记住池中的哪个特定连接被 runSQL1()
,并让 runSQL2()
请求相同的连接。
com.mchange.v2.c3p0.ComboPooledDataSource
有没有办法做到这一点?如果可能,我想要一个并发安全的答案(换句话说,如果 runSQL1() 中使用的连接正在被另一个线程使用,runSQL2() 获取连接的调用将等到该连接被另一个线程释放)。
但是,如果那是不可能的,我同意假设数据库连接(我关心的那些)都发生在一个线程中的答案,因此 runSQL2() 请求的任何连接都将 100% 可用如果它可用于 runSQL1()。
我也欢迎任何以其他方式解决问题的解决方案,只要它们不涉及“停止使用#temptables”作为解决方案的一部分。
最佳答案
最简单和最明显的方法就是从池中请求连接,然后使用该连接运行 runSQL1()
和 runSQL2()
。问题中建议的使用模式违背了连接池管理器的一般设计原则,因为它会有效地将它们提升为某种事务管理器。
有些 Java 框架可能有助于上述操作。例如在 Spring 中,@Transaction
或 TransactionTemplate
可用于划分事务边界,它将保证单个连接由单个线程使用(或更准确地说,根据事务传播注释)。 Spring 可以使用许多事务管理器,但可能最简单的是使用 DataSourceTransactionManager它也可以配置为使用 c3p0
作为 DataSource
。
关于java - 如何从 com.mchange.v2.c3p0.ComboPooledDataSource 请求特定连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39925469/
当我收到错误消息时,我应该在哪里指示类依赖性: 找不到类“com.mchange.v2.c3p0.ComboPooledDataSource” 找不到类“org.springframework.jdb
WARN (BasicResourcePool.java:1841) - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@5ccb7
我有一个使用连接池的 Spring boot 项目。它在我的电脑上工作正常,但是当我的同事从 git 中提取代码然后尝试运行时。它抛出了如下错误: 2018-02-28 14:49:24.527 W
我正在尝试使用以下代码创建 context.xml: ComboPooledDataSource cpds = new ComboPooledDataSource(); try {
问题: 程序使用 com.mchange.v2.c3p0.ComboPooledDataSource 连接到 Sybase 服务器 程序依次执行 runSQL1() 和 runSQL2() 两个方法
我有一个应用程序可以并行插入数据库数据 block (从技术上讲,很多 native INSERT 查询都在 EntityManager 对象上执行)。 我现在正试图了解如何加速这些插入。数据库主机和
我的 c3p0 配置如下,有时我会在我的控制台中收到以下错误消息。为什么我会收到这个? 5 100 300 50 300
各位,我是一个java新手。我正在尝试调试其他人编写的应用程序。当应用程序访问数据库时,我会看到以下语句。 DEBUG [TP-Processor9] - ooo Using Connection [
我在我的项目中配置了以下 c3p0 设置。但是在执行jar文件时,我发现“没有可写属性”。请告诉我如何解决这个问题。 配置:- dataSource.setClassName("com.mchange
我在 tomcat 版本 7 上部署了一个 java 应用程序。对于数据源,我使用了连接到 mysql 数据库的 c3p0。它多年来一直运行良好,最近我开始收到此错误:“客户端在等待从 com.mch
我将 Java EE DAL 设置为 jar 库。我使用JPA + Hibernate + C3P0进行连接池管理。 EntityManager 类由以下 bean 生成 package my.dal
截至最近,我的 API 在从 Web 应用程序请求 PUT 时一直产生以下错误。由于某种奇怪的原因,它只发生在 PUT 上。有时它会起作用(垃圾邮件点击运行此 PUT 请求的项目),而有时它会失败并出
我正在使用一个移动网络应用程序,其中数据库部分我使用Hibernate,连接池c3p0,当我在开始工作正常,但是在执行了一些事务(例如选择、保存、更新)之后,我收到以下异常,我不知道为什么会发生, S
当我尝试使用 c3p0 测试 mysql 数据库连接时,Eclipse 显示以下错误: caused by:java.lang.NoClassDefFoundError:com/mchange/v2/
获取 NullPointerException 我收到 NullPointerException Exception in thread "com.mchange.v2.async.ThreadPoo
我正在开发一个 spring MVC 项目。项目仍在开发中,如果我将 war 部署到我的本地 Tomcat 7 服务器,我会在 STS 中收到以下警告。 控制台警告: ClassLoaderLeakP
我得到以下信息 java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection 当下面的代码执行时。你能帮我解决一下
环境:服务器:Jboss 4.2.3.GA 我们使用 c3p0 0.9.1.2 作为连接池。 每当我们在 Jboss AS 中热部署 war 文件时,都会遇到来自 c3p0 的内存泄漏。它最终导致“j
我正在使用 C3P0 0.9.1.2 为我的连接池配置数据源。 加载上下文时会引发错误。这是跟踪: java.lang.NoSuchMethodException: com.mchange.v2.c3
环境:服务器:Jboss 4.2.3.GA 我们使用 c3p0 0.9.1.2 作为连接池。 每当我们在 Jboss AS 中热部署 war 文件时,都会遇到来自 c3p0 的内存泄漏。它最终导致“j
我是一名优秀的程序员,十分优秀!