我想在Docker容器中使用Apache Cayenne Java Web应用程序,因为有多个实例正在运行,我想通过环境变量对它们进行自定义。
现在,我有一个问题,我正在使用一个中央数据库,每个实例/容器的目录不同。
是否可以通过env设置defaultCatalog(在xxx.map.xml中定义)。变量?

问候
马库斯

最佳答案

Cayenne中的“默认”目录仅控制将什么目录分配给Modeler中新创建的DbEntities,并且对运行时行为没有影响。

现在,在大多数数据库的运行时中,默认目录都是通过连接URL进行控制的(即在Cayenne外部的JDBC级别)。例如。

jdbc:mysql://127.0.0.1/database
jdbc:postgresql://127.0.0.1/database


在MySQL和Postgres示例中,“数据库”是数据库名称(与目录相同)。

因此,您需要做的是保持所有Cayenne DbEntities的目录为空(而不仅仅是DataMap的“默认”目录),然后为每个具有适当数据库名称的Docker容器指定连接URL。一种控制方法是通过-Dcayenne.jdbc.url startup property

09-25 22:23