【问题标题】: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 名称,就像您以旧的普通方式一样: