通常,在会话中创建的临时表会保留在该会话中,并在关闭连接时被删除.但是,由于我正在使用连接池,并且在java.sql.Connection.close()调用时实际上并未关闭物理连接,因此我发现临时表停留并影响下一个会话.
这会导致DB上的资源泄漏,因为临时表不会立即释放,以及由于表名冲突而导致的名称冲突.
直观地说,当我借用连接时,我期待一个干净的名单.如何实现这一目标?
sp_reset_connection.除临时表外,此问题还会影响:
我已经在tomcat上阅读了更多关于JNDI的内容,并且我从多个资源中读取了工厂所需的资源.他们说它通常应该是" org.apache.tomcat.jdbc.pool.DataSourceFactory ".但是,我经常看到这样的事情 -
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
Run Code Online (Sandbox Code Playgroud)
那么tomcat在这种情况下做了什么?它默认为" org.apache.tomcat.jdbc.pool.DataSourceFactory "吗?
在Spring Security中,我定义了一个jdbc auth管理器:
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="securityDataSource"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="securityDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://127.0.0.1:5432/mydb"/>
... user and password props ...
</bean>
Run Code Online (Sandbox Code Playgroud)
此时我发现我需要Jakarta Commons DBCP.我添加了commons-dbcp-1.4,我得到以下异常:
...java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
Run Code Online (Sandbox Code Playgroud)
实际上,此路径不包含在公共dbcp 1.4中.
我又错过了什么?
编辑
确定,将依赖项添加到公共池,它的工作原理是因为使用正确的凭据我不再获得"错误的凭据"页面.但我得到一个HTTP状态403 - 访问被拒绝.
好像我的用户已通过身份验证,但未经授权.
任何的想法...?:-)
我的http元素是:
<security:http auto-config="true" >
<security:intercept-url pattern="/**" access="ROLE_USER"/>
</security:http>
Run Code Online (Sandbox Code Playgroud)
我有一个"测试"用户绑定到"权限"表中的"USER"角色.
谢谢
我正在使用spring 2.5 SimpleJdbcTemplate来访问MySQL数据库.当我尝试经常访问数据库(使用Quartz每分钟访问它)时,我得到了这个堆栈跟踪:
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:382)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:458)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:466)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:497)
at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForList(SimpleJdbcTemplate.java:223)
at com.db.timexis.dao.UserDaoJdbc.getListOfAllUsers(UserDaoJdbc.java:137)
at com.db.timexis.service.AuthServiceImpl.getListOfAllUsers(AuthServiceImpl.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) …Run Code Online (Sandbox Code Playgroud) 我的 Tomcat 有一个很糟糕的问题,很糟糕,因为这个问题我已经放弃了这个项目一个多月了......但我仍然需要解决它并继续这个项目......
所以它给我这个错误:
java.sql.SQLException:找不到适合 jdbc 的驱动程序:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2 java.lang.NullPointerException
问题是相同的应用程序在桌面版本 Perfectlz 中运行,但是当涉及到应该在服务器上运行的版本(NetBeans 7.1.2 中的 Tomcat 7.0.22.0)时,它只会抛出错误。似乎它没有加载池驱动程序,或者我什至不知道......
好吧,这是负责的部分:
public DatabaseConnection(Parameters params) {
// parameters and the output
this.gui = params.getGui();
// activate database pool
connectionPool = new GenericObjectPool(null);
connectionFactory = new DriverManagerConnectionFactory(params.getDbAdr(), params.getDbUser(), params.getDbPass());
poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true);
driver = new PoolingDriver();
driver.registerPool("GenTreeDatabase", connectionPool);
//driver.registerPool("jdbc:apache:commons:dbcp:GenTreeDatabase", connectionPool);
}
public void openConn() {
if (allowOutput) gui.print("Getting connection to database");
try {
con = DriverManager.getConnection("jdbc:apache:commons:dbcp:GenTreeDatabase");
if (con != null) { …Run Code Online (Sandbox Code Playgroud) Tomcat有一个数据库连接池(DBCP)来更快地发出请求.
在我的应用程序中,太多的连接被使用太长时间,我怀疑泄漏(连接没有正确关闭),我需要找出泄漏的位置.
问题:如何找出使用连接的每个线程的名称?
最好是现场JMX MBean,但也欢迎其他提示.显示每个线程的堆栈跟踪或类名也是可以接受的.
注意:我不是在寻找显示DBCP设置的MBean.我想看看每个连接的用途.
我正在使用postgres 9.1,org.apache.commons.dbcp.BasicDataSource(对于我的连接池)和Java 1.7.当我重新启动postgres服务器时,我得到了例外情况org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command.
如何使连接自动重新连接到重新启动的数据库?
在使用 HikariCP(或 Apache DBCP2)的 Spring 应用程序中切换到 PgBouncer 后,是否需要为 HikriCP(或 Apache DBCP2)端进行额外配置?
我想使用Commons-DBCP 2.0.在官方网站上我发现:
升级到2.x的用户应该知道Java包名称已经改变,以及Maven坐标,因为DBCP 2.x与DBCP 1.x不是二进制兼容的.
但是新的坐标是什么?正如预期的那样在这里只提供1.x的.
我使用此代码与 Sql 服务器建立连接,当我使用 Class.forName(driver) 它正确连接时出现该错误,但我更喜欢使用 DataSourse。
static final BasicDataSource dataSource = new BasicDataSource();
static {
dataSource.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
dataSource.setUrl("jdbc:jtds:sqlserver://Mypc/Mydb;instance=SQLEXPRESS;");
dataSource.setUsername("");
dataSource.setPassword("");
}
public static void main(String[] args){
try{
dataSource.getConnection();
}
catch (SQLException ex){
System.out.println(ex);
}}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
Run Code Online (Sandbox Code Playgroud)
我明白了
Exception in thread "main" java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
at org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:918)
at org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:283)
at org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:357)
at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2307)
at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2290)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2039)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533)
Run Code Online (Sandbox Code Playgroud) java ×6
tomcat ×3
mysql ×2
hikaricp ×1
java-ee ×1
jdbc ×1
jdbc-pool ×1
jndi ×1
jtds ×1
maven ×1
monitoring ×1
pgbouncer ×1
postgresql ×1
spring ×1
sql-server ×1