Java 了解密码更改时tomcat jdbc池的行为

Java 了解密码更改时tomcat jdbc池的行为,java,tomcat-jdbc,Java,Tomcat Jdbc,在下面的代码中(根据TomcatJDBC站点中给出的示例代码更改),我首先使用正确的用户名和密码创建连接池。过了一段时间,我把用户名和密码改错了,但仍然连接成功。我已将testOnBorrow设置为true,在发出连接时应测试该连接。有人能解释为什么代码在发出连接时不检查密码吗 我的代码 PoolProperties p = new PoolProperties(); p.setUrl("myurl"); p.setDriverClassName("

在下面的代码中(根据TomcatJDBC站点中给出的示例代码更改),我首先使用正确的用户名和密码创建连接池。过了一段时间,我把用户名和密码改错了,但仍然连接成功。我已将
testOnBorrow
设置为
true
,在发出连接时应测试该连接。有人能解释为什么代码在发出连接时不检查密码吗

我的代码

PoolProperties p = new PoolProperties();
    p.setUrl("myurl");
    p.setDriverClassName("oracle.jdbc.driver.OracleDriver");
    p.setUsername("test");
    p.setPassword("bsc");
    p.setJmxEnabled(true);
    p.setTestWhileIdle(false);
    p.setTestOnBorrow(true);
    p.setValidationQuery("SELECT 1");
    p.setTestOnReturn(true);
    p.setValidationInterval(30000);
    p.setTimeBetweenEvictionRunsMillis(30000);
    p.setMaxActive(100);
    p.setInitialSize(10);
    p.setMaxWait(1000);
    p.setRemoveAbandonedTimeout(60);
    p.setMinEvictableIdleTimeMillis(30000);
    p.setMinIdle(10);
    p.setLogAbandoned(true);
    p.setRemoveAbandoned(true);
    p.setJdbcInterceptors(
            "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" +
                    "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
    DataSource datasource = new DataSource();
    datasource.setPoolProperties(p);
    datasource.getPoolProperties().setUsername("Correct");
    datasource.getPoolProperties().setPassword("Correct");

    for (int i = 0; i < 1000; i++) {

        if (i == 6) {
            System.out.println("Updating wrong user.");
            datasource.getPoolProperties().setUsername("Wrong");
            datasource.getPoolProperties().setPassword("Wrong");
        }
        Connection con = null;
        try {
            System.out.println("Creating connection - " + i);
            con = datasource.getConnection();
            System.out.println("Done. connection status is open " + con.isClosed());
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(select);
            int cnt = 1;
            while (rs.next()) {
                System.out.println((cnt++) + ". Host:" + rs.getString(1));
            }
            rs.close();
            st.close();
            System.out.println("Done - \n");
        } finally {
            if (con != null) try {
                con.close();
            } catch (Exception ignore) {
            }
        }
PoolProperties p=newpoolproperties();
p、 setUrl(“myurl”);
p、 setDriverClassName(“oracle.jdbc.driver.OracleDriver”);
p、 设置用户名(“测试”);
p、 设置密码(“bsc”);
p、 setJmxEnabled(true);
p、 setTestWhileIdle(假);
p、 (真实的);
p、 setValidationQuery(“选择1”);
p、 返回(true);
p、 setValidationInterval(30000);
p、 SetTimeBetweenVictionRunsmillis(30000);
p、 setMaxActive(100);
p、 setInitialSize(10);
p、 setMaxWait(1000);
p、 SetRemoveBandonedTimeout(60);
p、 setminevictableidletimillis(30000);
p、 塞特米尼(10);
p、 SetLog放弃(真);
p、 SetRemoveBandoned(真);
p、 setjdbc拦截器(
“org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;”+
“org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer”);
DataSource DataSource=新数据源();
datasource.setPoolProperties(p);
datasource.getPoolProperties().setUsername(“正确”);
datasource.getPoolProperties().setPassword(“正确”);
对于(int i=0;i<1000;i++){
如果(i==6){
System.out.println(“更新错误的用户”);
datasource.getPoolProperties().setUsername(“错误”);
datasource.getPoolProperties().setPassword(“错误”);
}
连接con=null;
试一试{
System.out.println(“创建连接-”+i);
con=datasource.getConnection();
System.out.println(“完成。连接状态为打开”+con.isClosed());
语句st=con.createStatement();
结果集rs=st.executeQuery(选择);
int-cnt=1;
while(rs.next()){
System.out.println((cnt++)+.Host:+rs.getString(1));
}
rs.close();
圣克洛斯();
System.out.println(“完成-\n”);
}最后{
如果(con!=null),请尝试{
con.close();
}捕获(异常忽略){
}
}

连接已打开并缓存在池中。连接已打开,更改凭据不会对打开的连接产生任何影响,只会对新连接产生影响(如果根据需要打开)。如果希望所有连接使用新凭据,则需要关闭池并重新初始化。是否尝试mvn clean compile?当tomcat服务器启动时。它使用连接属性连接到DB并设置连接池。之后更改凭据将不会产生任何影响。要进行验证,可以检查调试日志当tomcat jdbc jar尝试进行身份验证时,。连接被打开并缓存在池中。连接已经打开,更改凭据不会对打开的连接产生任何影响,只会对新连接产生影响(如果根据需要打开)。如果希望所有连接使用新凭据,则需要关闭池并重新初始化。是否尝试mvn clean compile?当tomcat服务器启动时。它使用连接属性连接到DB并设置连接池。之后更改凭据将不会产生任何影响。要进行验证,可以检查调试日志当tomcat jdbc jar尝试进行身份验证时。。