【问题标题】:Simple-JNDI VS SimpleNamingContextBuilder with EmbeddedDatabaseBuilder and already existing Data SourceSimple-JNDI VS SimpleNamingContextBuilder 与 EmbeddedDatabaseBuilder 和现有的数据源
【发布时间】:2021-06-11 18:28:03
【问题描述】:

有人知道用 Simple-JNDI 配置 EmbeddedDatabaseBuilder 数据源吗? 我有一个用于测试目的的数据源,我正在构建这样的数据源:

    public DataSource dataSource() {
    EmbeddedDatabase datasource = new EmbeddedDatabaseBuilder()
            .setType(HSQL)
            .setSeparator(";")
            .addScript("classpath:/tables-definitions.sql")
            .build();
    return datasource;
}

我想用 Simple-JNDI 将它绑定到一个 JNDI 名称。你知道怎么做吗?

【问题讨论】:

    标签: java spring spring-boot hibernate spring-test


    【解决方案1】:

    最后我找到了如何使用 Simple-JNDI 绑定到您已有的数据源的 jndi 名称的答案,通常用于测试目的。

    如果您尝试使用 SimpleNamingContextBuilder,请注意:

    • SimpleNamingContextBuilder 在 Spring 5.2 及更高版本中被弃用,取而代之的是 Simple-JNDI
    • 很遗憾,我没有找到一个很好的 Simple-JNDI 文档来源,这使得更高级的东西变得有点麻烦。
    • 此外,SimpleNamingContextBuilder 仅与 JPA 一起无法与 JTA 一起使用 - 它不涵盖 JTA 的所有命名需求

    现在,如何使用 Simple-JNDI 将 JNDI 名称绑定到数据源:

    • 您需要将 Context.INITIAL_CONTEXT_FACTORY 设置为您想要为您完成工作的工厂类,在我的情况下,我选择 org.osjava.sj.memory.MemoryContextFactory - 如果您在 Simple 中查看此类的位置-JNDI 库,您将在那里找到更多选项,具体取决于您的需要

      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.osjava.sj.memory.MemoryContextFactory");
      

    然后你创建一个 Hashtable 并添加你需要设置的所有属性,就像你通过属性设置它们一样。

        Hashtable env = new Hashtable();
        env.put("org.osjava.sj.jndi.shared", "true");
    

    然后您将 DS 绑定到 JNDI 名称,就像您以旧的普通方式一样:

    • 使用 Hashtable 中的属性创建初始上下文

    • 创建子上下文

    • 然后将数据源绑定到 JNDI 名称/上下文:

      InitialContext ic = new InitialContext(env);
      ic.createSubcontext("java:/comp/env/jdbc");
      ic.bind("java:/comp/env/jdbc/"+dataSourceJndiname, datasource);
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 2016-06-27
      • 2014-11-14
      • 2019-04-10
      • 2011-05-17
      相关资源
      最近更新 更多