Я добавил некоторые пользовательские свойства в процессор updateAttribute с помощью кнопки «+». Например: я объявил свойство 'DBConnectionURL' и дал значение как 'jdbc:mysql://localhost:3306/test'. Затем в контроллере службы «DBCPConnectionPool» я просто использовал значение «${DBConnectionURL}» для свойства «URL-адрес подключения к базе данных». Но я вручную дал значение для свойства «DBConnectionURL». Мне нужен способ, при котором я могу динамически передавать значение из файла, так что мне просто нужно изменить значение в файле, а значение для «DBConnectionURL» изменяется динамически на основе на значение, присутствующее в файле. Есть ли способ сделать это?
Как динамически читать значения из файла для свойства в updateAttribute?
Ответы (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
Начиная с (я полагаю) NiFi 1.5.0, вы также можете устанавливать переменные непосредственно в группе процессов (включая корневую PG) из пользовательского интерфейса, щелкнув правой кнопкой мыши и выбрав «Переменные». Это своего рода встроенный реестр переменных, поэтому вам не нужен описанный выше файловый реестр.
- person mattyb; 05.04.2018
@ Махендра Прабху Это сработало. Большое спасибо. Ты крут :)
- person Rishab Prasad; 05.04.2018
Не стесняйтесь принять это как ответ, потому что это может быть полезно для кого-то????
- person Mister X; 05.04.2018
@Mahendraprabhu Мы имеем дело с несколькими базами данных, поэтому, если исходная БД изменится с MySQl на Oracle, мне придется вручную изменить значения в файле dynamic.properties. Мне нужно автоматизировать это. Один из способов заключается в том, что у нас может быть несколько файлов свойств для каждой базы данных, например: MySQL.properties, Oracle. Характеристики. Но как мы можем динамически генерировать службу DBCPConnectionPool для каждого файла свойств? Я имею в виду, что если исходная БД изменяется, служба DBCPConnectionPool должна автоматически считывать значения только из того файла свойств, который определен для этой конкретной базы данных, но не из любого другого файла.
- person Rishab Prasad; 06.04.2018
Вы можете создать три пула dbcpconnectionpool, в которых выводятся различные значения свойств, а затем использовать их в вашем случае.
- person Mister X; 06.04.2018
@Mahendraprabhu Если я создаю три DBCPConnectionPool, мне нужно вручную менять DBCPConnectionPool каждый раз, когда в исходной базе данных происходят изменения. В таком случае я могу напрямую указать соответствующие значения для каждого DBCPConnectionPool. Так что нет смысла создавать три разных файла, если мне придется делать это вручную. Я хочу, чтобы это происходило автоматически
- person Rishab Prasad; 06.04.2018
Другого пути нет, потому что jdbcConnectionpool не поддерживает язык выражений.
- person Mister X; 06.04.2018
Давайте продолжим обсуждение в чате.
- person Rishab Prasad; 06.04.2018