当针对具有1400+表的数据库运行模板时,我收到以下错误.服务器显示数百个连接.有没有人知道这是一般的模板生成问题,还是具体使用这些模板.其他较小的DB对我来说也没问题.
正在运行转换:System.InvalidOperationException:超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
在Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1的System.Data.SqlClient.SqlConnection.Open()处的System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)处的System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)处. C:\ POS\POS.Win\Templates\SQLServer.ttinclude中的GeneratedTextTransformation.GetCommand(String sql):c:\ POS\POS.Win\Templates中Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.LoadFKTables(String tableName)中的第13行\ SQLServer.ttinclude:第179行,Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.LoadTables(),位于c:\ POS\POS.Win\Templates\SQLServer.ttinclude:第131行,位于Microsoft.VisualStudio.TextTemplating8D8967BD3E8719BDA6DD9945992440F1.GeneratedTextTransformation.TransformText()in c:\ POS\POS.Win\Templates\ActiveRecord.tt:第21行
我需要编写一个管理连接池的应用程序。我想知道应该研究哪些算法。
我是Java EE World的新手,想在Web应用程序中使用PostgreSQL作为我的数据库.我使用Glassfish作为我的应用程序服务器,并通过管理界面添加了一个连接池(我使用此站点寻求帮助).现在我不知道在我的应用程序中使用连接池的"正确"方法是什么(实际上我目前还不知道如何从池中获取连接并编写简单的查询).
我们需要编写非常复杂的查询,因此我不知道是否应该为每个表创建映射并使用映射,或者只使用sql和某种行映射器来解析结果(之前我们使用过Spring RowMap) .
所以我的问题是:
我正在为Postgresql寻找一个强大的连接池库.
类似于https://github.com/dweldon/riakpool的东西会很棒.
在使用BoneCP连接池时,我遇到了以下混淆,并希望听到一些建议:
getConnectionBoneCP 的方法是线程安全的吗?当有许多线程要求并行连接时,最好的方法是什么?connection.close()每次使用连接后是否需要呼叫?connection.close(),它是否真的断开与DB的连接或只是将连接发送到池?在此先感谢您的支持.
我们正在开发Java SE应用程序,而我正在使用Hibernate与数据库进行通信。我的数据库是Oracle 11g Express Edition。到目前为止,我尚未在应用程序中使用连接池。但是我以前使用过c3p0连接池,但是我从未真正了解过它。
在Java SE应用程序中使用c3p0的优缺点是什么?我了解Java EE应用程序有用,但是Java SE吗?
这是我的休眠配置。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
<property name="hibernate.connection.username">EP</property>
<property name="hibernate.connection.password">123</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema">EP</property>
<property name="show_sql">true</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<mapping class="app.model.User"></mapping>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud) 我正在开始研究一个位于Oracle 10g上的小型Java Web应用程序.预期的用户群最多可达100个用户.我不希望使用该应用程序一次看到超过50个用户.
现在,我正在考虑DBCP,C3P0或Tomcat JDBC连接池,但是这会为这么小的用户群增加真正的价值吗?我从来没有使用任何解决方案,所以存在引入复杂性的风险(我已经看到其他线程,人们面临着连接池的一些疯狂问题)而且我不确定这些好处会超过风险.或者还有其他方法吗?也许Oracle拥有自己的解决方案?
请帮忙.
谢谢.
我已经在多线程环境中阅读了几个关于SQLite的相关主题,但是我找不到一个明确的声明,所以请原谅我再次提出这个主题.
我需要从多个线程访问应用程序的数据库以执行更新语句.数据库本身可以是SQLite或MySQL,具体取决于用户的选择.对于MySQL处理程序,我使用tomcat-jdbc库实现了一个连接池.现在我正在搜索SQLite处理程序的最佳方法,因为正常的连接池不应该工作,因为SQLite一次只支持一个写入连接来锁定整个数据库.
我是否应该继续使用相同的连接(通过同步连接?)来创建所有线程?或者我应该使用已经存在的仅存在连接的tomcat库创建连接池?一个连接的连接池可能超大吗?
我正在使用tomcat连接池.但我跟随例外
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
所以我在context.xml中输入以下行来查找泄漏:
removeAbandoned="true" logAbandoned="true" removeAbandonedTimeout="3"
然后我开始得到以下异常org.apache.tomcat.dbcp.dbcp.AbandonedTrace$AbandonedObjectException: DBCP object created 2015-01-17 22:12:18 by the following code was never closed:
因此我发现导致这种泄漏的两个罪魁祸首方法.这两种方法有通用的连接方式,即调用unwrap来访问驱动程序特定的连接.
try (Connection conn = DataSourceConnectionPool.getConnection().unwrap(OracleConnection.class);
OracleCallableStatement cstmt = (OracleCallableStatement) conn.prepareCall(MIGRATE_ACCOUNT)) {
...
....
)
Run Code Online (Sandbox Code Playgroud)
重要的是要注意的是我正在使用来自JDK7的try块,即自动资源管理,所以我不需要finally块.连接关闭由JDK自动处理.但为什么这个解开的连接没有关闭.当我试图做以下事情时:
try (Connection poolConn = DataSourceConnectionPool.getConnection();
Connection conn = poolConn.unwrap(OracleConnection.class);
Run Code Online (Sandbox Code Playgroud)
我越来越java.sql.SQLException: Already closed.接近这种联系了.我是否必须手动完成而不使用try块?不应该尝试块手柄能够处理这个吗?
当您使用Grails管理MySQL连接时,您需要(为了处理重新连接)DataSource.groovy中的属性部分:
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
environments {
production{
dataSource {
dbCreate = "upate"
url = "jdbc:mysql://127.0.0.1:3306/mydb"
username = "myuser"
password = "mypass"
}
}
Run Code Online (Sandbox Code Playgroud)
当您切换到使用Tomcat的连接池时,大多数示例都给出了:
production {
dataSource {
dbCreate = "update"
jndiName = "java:comp/env/revolve"
}
Run Code Online (Sandbox Code Playgroud)
问题1
对于这种类型的连接(即使用tomcat),应该在DataSource.grovvy中pooled = true或false,还是重要?有帖子说它必须是假的,帖子说它必须是真的,而有些则没有指明它.如果设置为True,则表示存在池池,但这是大多数示例推荐的.
问题2
属性部分是否被忽略?如果不是,建议的字段是什么.根据我的反复试验,属性似乎被忽略了,与此类帖子相反.
例如,使用JNDI时,DataSource.java属性中的validationQuery ="SELECT 1"似乎被忽略.即如果我重新启动数据库,Tomcat上的应用程序已永久失去与数据库的连接.如果我在Tomcat context.xml中添加相同的行:
<Resource name="revolve" auth="Container" type="javax.sql.DataSource"
maxActive="50" maxIdle="5" maxWait="10000"
username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver"
validationquery="SELECT …Run Code Online (Sandbox Code Playgroud)