При работе с проектом, использующим несколько баз данных столкнулся с тем что для работы стандартных тестов требуется донастроить подключение второй базы данных. Так как для настройки тест контейнера у меня заняло достаточно много времени мне захотелось поделиться своим опытом, так как был близок просто задать вопрос.
По итогу требуется всего несколько действий:
-
Получить дополнительные данные из context.xml. В тест контейнере просто переписываем в виде:
private void initDbProperties() { File contextXmlFile = new File("modules/core/web/META-INF/context.xml"); if (!contextXmlFile.exists()) { contextXmlFile = new File("web/META-INF/context.xml"); } if (!contextXmlFile.exists()) { throw new RuntimeException("Cannot find 'context.xml' file to read database connection properties. " + "You can set them explicitly in this method."); } Document contextXmlDoc = Dom4j.readDocument(contextXmlFile); List<Element> elements = contextXmlDoc.getRootElement().elements("Resource"); for (int i = 0; i < elements.size(); i++) { Element element = elements.get(i); if (i == 0) { dbDriver = element.attributeValue("driverClassName"); dbUrl = element.attributeValue("url"); dbUser = element.attributeValue("username"); dbPassword = element.attributeValue("password"); } else { dbDopDriver = element.attributeValue("driverClassName"); dbDopUrl = element.attributeValue("url"); dbDopUser = element.attributeValue("username"); dbDopPassword = element.attributeValue("password"); } } }
-
В дочернем классе Common надо переопределить метод initDataSources()
@Override protected void initDataSources() { super.initDataSources(); try { Class.forName(dbDopDriver); TestDataSource ds = new TestDataSource(dbDopUrl, dbDopUser, dbDopPassword); TestContext.getInstance().bind(AppContext.getProperty("cuba.dataSourceJndiName_DopDs"), ds); } catch (ClassNotFoundException | NamingException e) { throw new RuntimeException("Error initializing datasource", e); } }
В общем то и все. Кстати на форуме предложил бы добавить раздел “Делимся опытом” или тп.
Для примера запилил тестовый проект https://github.com/UnMatty/multyDsExample