有谁知道如何使用 Simple-JNDI 配置 EmbeddedDatabaseBuilder 数据源? 我有一个用于测试目的的数据源,我正在这样构建:
public DataSource dataSource() {
EmbeddedDatabase datasource = new EmbeddedDatabaseBuilder()
.setType(HSQL)
.setSeparator(";")
.addScript("classpath:/tables-definitions.sql")
.build();
return datasource;
}
我想使用 Simple-JNDI 将其绑定到 JNDI 名称。你知道该怎么做吗?
最后我找到了如何使用 Simple-JNDI 绑定到您已有的数据源的 jndi 名称的答案,通常用于测试目的。
如果您尝试使用 SimpleNamingContextBuilder,这只是一个观察:
现在,如何将带有 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 env = new Hashtable();
env.put("org.osjava.sj.jndi.shared", "true");
然后将 DS 绑定到 JNDI 名称,就像使用旧的简单方式一样:
使用哈希表中的属性创建初始上下文
创建子上下文
然后将数据源绑定到JNDI名称/上下文:
InitialContext ic = new InitialContext(env);
ic.createSubcontext("java:/comp/env/jdbc");
ic.bind("java:/comp/env/jdbc/"+dataSourceJndiname, datasource);
这也对我有帮助。 我从 Spring 5 过渡到 Spring 6,无法再使用 springframework-mock.jar,因为它包含已移至 springframework-test.jar 中的类。 特别是 SimpleNamingContextBuilder。 这对我有用。
Hashtable<String, String> env = new Hashtable<>();
try {
Properties properties = new Properties();
properties.load(ResourceHelper.getFileResourceStream("/jndi.properties"));
Set<Map.Entry<Object, Object>> entries = properties.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
env.put(entry.getKey().toString(), entry.getValue().toString());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
InitialContext initialContext = new InitialContext(env);
Context subcontext = initialContext.createSubcontext("java:comp");
Context envSubcontext = subcontext.createSubcontext("env");
initialContext.bind("java:comp/env/sqlDataStoreDS", testSqlDataSource);