Java 创建静态数据源

Java 创建静态数据源,java,datasource,initial-context,Java,Datasource,Initial Context,我在这个问题上做了足够的研究,但还没有找到一个具体的答案。下面是代码片段 private static Map<String,DataSource> dataSourceMap; static { Map<String,DataSource> jndiContextDataSourceMap = new HashMap<>(); try { jndiContextDataSourceMap.put(JNDI_D

我在这个问题上做了足够的研究,但还没有找到一个具体的答案。下面是代码片段

private static Map<String,DataSource> dataSourceMap;

    static {
      Map<String,DataSource> jndiContextDataSourceMap = new HashMap<>();
      try {
        jndiContextDataSourceMap.put(JNDI_DEFAULT_DATASOURCE, (DataSource) new InitialContext().lookup(JNDI_DEFAULT_DATASOURCE));
      } catch (NamingException namingException) {
        logger.error("Unable to obtain default DataSource through JNDI Lookup.", namingException);
      }
      try {
        jndiContextDataSourceMap.put(JNDI_READ_REPLICA, (DataSource) new InitialContext().lookup(JNDI_READ_REPLICA));
      } catch (NamingException namingException) {
        logger.error("Unable to obtain read only DataSource through JNDI Lookup.", namingException);
      }
      dataSourceMap = Collections.unmodifiableMap(jndiContextDataSourceMap);
    }
私有静态地图数据源地图;
静止的{
Map jndiContextDataSourceMap=newhashmap();
试一试{
jndiContextDataSourceMap.put(JNDI_DEFAULT_DATASOURCE,(DATASOURCE)new InitialContext().lookup(JNDI_DEFAULT_DATASOURCE));
}捕获(NamingException NamingException){
logger.error(“无法通过JNDI查找获取默认数据源。”,namingException);
}
试一试{
jndiContextDataSourceMap.put(JNDI_读取_副本,(数据源)new InitialContext().lookup(JNDI_读取_副本));
}捕获(NamingException NamingException){
logger.error(“无法通过JNDI查找获取只读数据源。”,namingException);
}
dataSourceMap=Collections.unmodifiableMap(jndiContextDataSourceMap);
}
使用相同的
数据源
对象可以吗?我检查了,但其中没有关于线程安全性的细节


我用它来避免
查找
,并避免为每个请求创建新的
初始上下文。

是的,应该可以。由于
数据源
负责提供
连接
,因此不使其线程安全是一个非常糟糕的想法。毕竟,大多数程序同时使用多个连接。它可能没有被记录为线程安全的,但任何sane实现都是线程安全的。

“应该没问题”不同于“它没问题”。对吗?而且,如果您能解释一下原因,以及代码方面的原因,我将不胜感激。正如我所说,没有任何东西可以阻止您编写非线程安全的
数据源
,但它将完全不适用于除单线程应用程序之外的任何应用程序。