Динамически работать со свойствами приложения — настройками хранилища (или любыми другими значениями).JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Динамически работать со свойствами приложения — настройками хранилища (или любыми другими значениями).

Сообщение Anonymous »

Я хотел бы иметь возможность гибко выбирать между сторонними компонентами, которые использует мое приложение. ATM У меня есть жестко запрограммированные значения

Код: Выделить всё

spring.cloud.vault.token=ffffffff-ffff-ffff-ffff-ffffffffffff
spring.cloud.vault.scheme=http
spring.cloud.vault.application-name=test
spring.cloud.vault.host=127.0.0.1
spring.cloud.vault.port=8200
Цель состоит в том, чтобы:
  • Если установлен Spring.cloud.vault.host, попробуйте использовать его. Если Spring.cloud.vault.host пуст, используйте
    вместо этого локальную базу данных (при правильной настройке)
Моей первой мыслью было использовать переменные среды, например:

Код: Выделить всё

spring.cloud.vault.token=${VAULT_TOKEN}
spring.cloud.vault.scheme=${VAULT_SCHEME}
spring.cloud.vault.application-name=${VAULT_APP_NAME}
spring.cloud.vault.host=${VAULT_HOST}
spring.cloud.vault.port=${VAULT_PORT}
и позже используйте класс компонента, например:

Код: Выделить всё

@Component
public class VaultHelper {
private final VaultOperations vaultOperations;
@Value("${spring.cloud.vault.host}")
String vaultHostname;

@Autowired
public VaultHelper(VaultOperations vaultOperations){
this.vaultOperations = vaultOperations;
}

public void saveToVault(String password){
if (!vaultHostname.equals("")) {
// Use vaultOperations to store password
} else {
// Use plaintext db storage
}
}

public byte[] readFromVault(String passwordLoc){
if (!vaultHostname.equals("")) {
// Use vaultOperations to access password
} else {
// return plaintext password
}
return new byte[0];
}

}
Таким образом я мог бы установить ${VAULT_HOST} как из переменной среды (запуск приложения из docker-compose), так и просто установить --spring.cloud.vault.host=URL на локальном компьютере в качестве параметра Java.
К сожалению, я получаю исключение при разборе поля ${VAULT_PORT

Код: Выделить всё

Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [int] for value '${VAULT_PORT}'; nested exception is java.lang.NumberFormatException: For input string: "${VAULT_PORT}"
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:47) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.BindConverter$CompositeConversionService.convert(BindConverter.java:170) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:96) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:88) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.Binder.bindProperty(Binder.java:435) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:380) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:320) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
...  83 common frames omitted
Caused by: java.lang.NumberFormatException: For input string: "${VAULT_PORT}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_231]
at java.lang.Integer.parseInt(Integer.java:569) ~[na:1.8.0_231]
at java.lang.Integer.valueOf(Integer.java:766) ~[na:1.8.0_231]
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:62) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:49) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.core.convert.support.GenericConversionService$ConverterFactoryAdapter.convert(GenericConversionService.java:436) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) ~[spring-core-5.2.1.RELEASE.jar:5.2.1.RELEASE]
... 90 common frames omitted

Process finished with exit code 1
может ли кто-нибудь подсказать, как заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/602 ... -other-val
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»