gpt4 book ai didi

java - 在 Cayenne 中设置数据库路径

转载 作者:行者123 更新时间:2023-11-30 08:29:57 26 4
gpt4 key购买 nike

我计划在一个项目中使用 Apache Cayenne,但我很难正确设置它。

Cayenne tutorial显示如何在 CayenneModeller 中设置数据库位置。我的问题是我想在运行时动态确定的路径上使用 Apache Derby,但我无法找到如何让 Cayenne 使用该路径。

我试过这样设置路径:

private static boolean setupDataBase() {
String path = Globals.USER_DATA_DIRECTORY + File.separator + "db";
try {
DataSource dataSource = new PoolManager(
"org.apache.derby.jdbc.EmbeddedDriver",
"jdbc:derby:" + path + ";create=true",
1,
1,
null,
null
);
Configuration configuration = Configuration.getSharedConfiguration();
DataDomain domain = configuration.getDomain();
DataNode node = domain.getNode("MaciNode");
node.setDataSource(dataSource);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}

但是当我稍后调用 DataContext.createDataContext() 时,控制台中的日志显示如下:

Information: Created connection pool: jdbc:derby:memory:testdb;create=true

那是我在 CayenneModeller 中设置的内存中测试 URL,而不是我在 setupDataBase 中设置的那个(是的,我确实非常努力地调用了该方法)。此外,没有创建数据库文件(我用调试器验证了路径是正确的)。

那么,这个问题的规范解是什么?

最佳答案

我认为您看到的日志输出来自这一行:

Configuration configuration = Configuration.getSharedConfiguration()

即默认数据源在您安装之前加载。虽然有破解 3.0 启动顺序的方法,但我强烈建议改用 Cayenne 3.1B2。它即将成为“RC”和“最终版”,所以不要对其当前的 Beta 状态感到 panic 。

可以在 3.1 中构建自定义数据源的一种方法是在 Cayenne DI 模块中定义一些属性,如 here 所述。 ,并让 Cayenne 担心正确的启动顺序。修剪上面建议的不相关部分,您的启动代码可能如下所示:

Module m1 = new Module() {

@Override
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.JDBC_DRIVER_PROPERTY, "com.my.Driver")
.put(Constants.JDBC_URL_PROPERTY, "jdbc://db1_url")
.put(Constants.JDBC_USERNAME_PROPERTY, "db1login")
.put(Constants.JDBC_PASSWORD_PROPERTY, "db1password");
}
};

ServerRuntime r1 = new ServerRuntime("cayenne-project.xml", m1);

关于java - 在 Cayenne 中设置数据库路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18948418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com