Browse Source

DEC-15199 同样数据创建的datasource,首次init报错后,第二次init不会报错

release/10.0
lidongy 4 years ago
parent
commit
448c3a8171
  1. 8
      fine-druid/src/main/java/com/fr/third/alibaba/druid/pool/DruidDataSource.java
  2. 40
      fine-druid/src/test/java/com/fr/third/alibaba/druid/pool/DruidDataSourceTest.java

8
fine-druid/src/main/java/com/fr/third/alibaba/druid/pool/DruidDataSource.java

@ -168,6 +168,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
private volatile boolean keepAlive = false; private volatile boolean keepAlive = false;
private SQLException initException = null;
public DruidDataSource() { public DruidDataSource() {
this(false); this(false);
} }
@ -643,6 +645,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
} }
public void init() throws SQLException { public void init() throws SQLException {
if (initException != null) {
LOG.error("{dataSource-" + this.getID() + "} init error", initException);
throw initException;
}
if (inited) { if (inited) {
return; return;
} }
@ -811,6 +818,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
} }
} catch (SQLException e) { } catch (SQLException e) {
LOG.error("{dataSource-" + this.getID() + "} init error", e); LOG.error("{dataSource-" + this.getID() + "} init error", e);
initException = e;
throw e; throw e;
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new SQLException(e.getMessage(), e); throw new SQLException(e.getMessage(), e);

40
fine-druid/src/test/java/com/fr/third/alibaba/druid/pool/DruidDataSourceTest.java

@ -0,0 +1,40 @@
package com.fr.third.alibaba.druid.pool;
import com.fr.invoke.Reflect;
import org.junit.Assert;
import org.junit.Test;
/**
* @author lidongy
* @version 10.0
* Created by lidongy on 2020/9/27
*/
public class DruidDataSourceTest {
@Test
public void testInitException() {
DruidDataSource dataSource = new DruidDataSource();
Reflect.on(dataSource).set("maxEvictableIdleTimeMillis", 1);
Reflect.on(dataSource).set("minEvictableIdleTimeMillis", 2);
boolean flag1 = false;
boolean flag2 = false;
try {
dataSource.init();
} catch (Exception e) {
flag1 = true;
}
//按照以前错误的逻辑,第二次init时就不会报错
try {
dataSource.init();
} catch (Exception e) {
flag2 = true;
}
Assert.assertTrue(flag1);
Assert.assertTrue(flag2);
}
}
Loading…
Cancel
Save