Как динамически читать значения из файла для свойства в updateAttribute?

Я добавил некоторые пользовательские свойства в процессор updateAttribute с помощью кнопки «+». Например: я объявил свойство 'DBConnectionURL' и дал значение как 'jdbc:mysql://localhost:3306/test'. Затем в контроллере службы «DBCPConnectionPool» я просто использовал значение «${DBConnectionURL}» для свойства «URL-адрес подключения к базе данных». Но я вручную дал значение для свойства «DBConnectionURL». Мне нужен способ, при котором я могу динамически передавать значение из файла, так что мне просто нужно изменить значение в файле, а значение для «DBConnectionURL» изменяется динамически на основе на значение, присутствующее в файле. Есть ли способ сделать это?


person Rishab Prasad    schedule 05.04.2018    source источник


Ответы (1)


Ришаб,

Вы должны использовать реестр переменных nifi.

В conf/nifi.properties вы можете настроить приведенную ниже конфигурацию для динамического обновления значения в вашем потоке данных.

nifi.variable.registry.properties=./dynamic.properties

Вы можете указать свои переменные в этом файле dynamic.properties, который должен присутствовать в каталоге conf.

Например, если файлы dynamic.properties содержат следующие значения

DBCPURL= jdbc://<host>:<port>

вы можете использовать это в своем потоке данных, используя ${DBCPURL}

Примечание. Вам следует перезапустить службы nifi, если вы измените какую-либо конфигурацию в conf/nifi.properties. В противном случае ваши изменения не будут работать в потоке данных.

Не стесняйтесь принимать это как ответ, если он сработал для вас.

person Mister X    schedule 05.04.2018
comment
Начиная с (я полагаю) NiFi 1.5.0, вы также можете устанавливать переменные непосредственно в группе процессов (включая корневую PG) из пользовательского интерфейса, щелкнув правой кнопкой мыши и выбрав «Переменные». Это своего рода встроенный реестр переменных, поэтому вам не нужен описанный выше файловый реестр. - person mattyb; 05.04.2018
comment
@ Махендра Прабху Это сработало. Большое спасибо. Ты крут :) - person Rishab Prasad; 05.04.2018
comment
Не стесняйтесь принять это как ответ, потому что это может быть полезно для кого-то???? - person Mister X; 05.04.2018
comment
@Mahendraprabhu Мы имеем дело с несколькими базами данных, поэтому, если исходная БД изменится с MySQl на Oracle, мне придется вручную изменить значения в файле dynamic.properties. Мне нужно автоматизировать это. Один из способов заключается в том, что у нас может быть несколько файлов свойств для каждой базы данных, например: MySQL.properties, Oracle. Характеристики. Но как мы можем динамически генерировать службу DBCPConnectionPool для каждого файла свойств? Я имею в виду, что если исходная БД изменяется, служба DBCPConnectionPool должна автоматически считывать значения только из того файла свойств, который определен для этой конкретной базы данных, но не из любого другого файла. - person Rishab Prasad; 06.04.2018
comment
Вы можете создать три пула dbcpconnectionpool, в которых выводятся различные значения свойств, а затем использовать их в вашем случае. - person Mister X; 06.04.2018
comment
@Mahendraprabhu Если я создаю три DBCPConnectionPool, мне нужно вручную менять DBCPConnectionPool каждый раз, когда в исходной базе данных происходят изменения. В таком случае я могу напрямую указать соответствующие значения для каждого DBCPConnectionPool. Так что нет смысла создавать три разных файла, если мне придется делать это вручную. Я хочу, чтобы это происходило автоматически - person Rishab Prasad; 06.04.2018
comment
Другого пути нет, потому что jdbcConnectionpool не поддерживает язык выражений. - person Mister X; 06.04.2018
comment
Давайте продолжим обсуждение в чате. - person Rishab Prasad; 06.04.2018