Синхронизировать произвольное количество источников данных в одной центральной базе данных - PullRequest
0 голосов
/ 14 марта 2019

Базы данных и их таблицы гарантированно идентичны.Одна база данных будет действовать как «основная» и импортировать данные из других баз данных в себя.Сейчас мне это удалось, но я вручную создал запрос на вставку очень архаичным способом:

  1. Я выполняю запрос к одной базе данных, используя конечную точку, такую ​​как sql:file:somefile.sql?dataSource=dataSource1&outputHeader=result.
  2. Я повторяю результирующий набор запросов на вставку данных и конструкций для каждой строки и вставляю их в базу данных master.
split(header("result"))
    .to("direct:handleSingleRow")
.end()

Именно так я сейчас и поступаю при обработке отдельных строк, где всеИмена столбцов и значения извлекаются из результирующего набора строка за строкой:

String insertQuery = String.format("INSERT INTO %s.%s (%s) VALUES (%s)", schema, tableName, columns, join(", ", parsedRowValues.values()));

В результате получается что-то вроде INSERT INTO public.table (columnone, columntwo) VALUES (1, 2).

Затем я передаю этот запрос моей "основной" базе данных, напримеритак

sql:INSERT INTO public.table (columnone, columntwo) VALUES (1, 2)?dataSource=master

Есть ли лучший способ сделать это с помощью Camel?Я не хочу использовать hibernate и POJO, потому что я хочу, чтобы конечный пользователь мог поместить файлы sql в папку, и они будут выполнены.Есть ли способ просто взять один набор результатов из запроса и ввести его в следующий?

Оптимально я хотел бы сделать это:

to("sql:file:query.sql?dataSource=dataSource1&outputHeader=result")
.to("sql:?inputHeader=result")

Какой самый чистый способ копирования данныхиз одной базы данных в другую, используя Camel?Как я могу улучшить свое текущее решение?

...