在启动时为所有应用程序初始化一次多个连接池
Initialize multiple connection pools once for all application at startup
我正在尝试为所有应用程序初始化多个连接池。为了实现这一点,我写了 helper class:
public final class DataBaseHandler {
public static final class DataSources {
public static final DataSource DB1;
public static final DataSource DB2;
public static final DataSource DB3;
public static final DataSource DB4;
static {
try {
Context ctx = new InitialContext();
DB1 = (DataSource) ctx.lookup("jdbc/DB1");
DB2 = (DataSource) ctx.lookup("jdbc/DB2");
DB3 = (DataSource) ctx.lookup("jdbc/DB3");
DB4 = (DataSource) ctx.lookup("jdbc/DB4");
}
catch (NamingException ex) {
throw new ExceptionInInitializerError("DataSource is not initialized");
}
}
}
但是当我尝试在代码中获取这些 DataSources
中的任何一个时,我收到一个异常提示 DataSource is not initialized
。
这是调用:
DataSource ds = DataBaseHandler.DataSources.DB1;
看起来 DataSources
代码的 static
部分从未被执行。
您知道为什么会发生这种情况吗?
最后发现是Context
出了问题。我不得不使用 env
上下文:
Context envCtx = (Context) ctx.lookup("java:comp/env");
工作正常class:
public final class DataBaseHandler {
public static final class DataSources {
public static final DataSource DB1;
public static final DataSource DB2;
public static final DataSource DB3;
public static final DataSource DB4;
static {
try {
Context ctx = new InitialContext();
Context envCtx = (Context) ctx.lookup("java:comp/env");
DB1 = (DataSource) envCtx.lookup("jdbc/DB1");
DB2 = (DataSource) envCtx.lookup("jdbc/DB2");
DB3 = (DataSource) envCtx.lookup("jdbc/DB3");
DB4 = (DataSource) envCtx.lookup("jdbc/DB4");
}
catch (NamingException ex) {
throw new ExceptionInInitializerError("DataSource is not initialized");
}
}
}
}
我正在尝试为所有应用程序初始化多个连接池。为了实现这一点,我写了 helper class:
public final class DataBaseHandler {
public static final class DataSources {
public static final DataSource DB1;
public static final DataSource DB2;
public static final DataSource DB3;
public static final DataSource DB4;
static {
try {
Context ctx = new InitialContext();
DB1 = (DataSource) ctx.lookup("jdbc/DB1");
DB2 = (DataSource) ctx.lookup("jdbc/DB2");
DB3 = (DataSource) ctx.lookup("jdbc/DB3");
DB4 = (DataSource) ctx.lookup("jdbc/DB4");
}
catch (NamingException ex) {
throw new ExceptionInInitializerError("DataSource is not initialized");
}
}
}
但是当我尝试在代码中获取这些 DataSources
中的任何一个时,我收到一个异常提示 DataSource is not initialized
。
这是调用:
DataSource ds = DataBaseHandler.DataSources.DB1;
看起来 DataSources
代码的 static
部分从未被执行。
您知道为什么会发生这种情况吗?
最后发现是Context
出了问题。我不得不使用 env
上下文:
Context envCtx = (Context) ctx.lookup("java:comp/env");
工作正常class:
public final class DataBaseHandler {
public static final class DataSources {
public static final DataSource DB1;
public static final DataSource DB2;
public static final DataSource DB3;
public static final DataSource DB4;
static {
try {
Context ctx = new InitialContext();
Context envCtx = (Context) ctx.lookup("java:comp/env");
DB1 = (DataSource) envCtx.lookup("jdbc/DB1");
DB2 = (DataSource) envCtx.lookup("jdbc/DB2");
DB3 = (DataSource) envCtx.lookup("jdbc/DB3");
DB4 = (DataSource) envCtx.lookup("jdbc/DB4");
}
catch (NamingException ex) {
throw new ExceptionInInitializerError("DataSource is not initialized");
}
}
}
}