Я пытаюсь использовать аннотацию @Value в параметрах конструктора следующим образом:
@Autowired
public StringEncryptor(
@Value("${encryptor.password:\"\"}") String password,
@Value("${encryptor.algorithm:\"PBEWithMD5AndTripleDES\"}") String algorithm,
@Value("${encryptor.poolSize:10}") Integer poolSize,
@Value("${encryptor.salt:\"\"}") String salt) {
...
}
Когда файл свойств присутствует в пути к классам, свойства загружаются отлично, и тест выполняется отлично. Однако, когда я удаляю файл свойств из пути к классам, я бы ожидал, что будут использоваться значения по умолчанию, например, poolSize будет установлен в 10 или алгоритм для PBEWithMD5AndTripleDES, но это не так.
Запуск кода через отладчик (который работал бы только после изменения @Value("${encryptor.poolSize:10}") Integer poolSize
до @Value("${encryptor.poolSize:10}") String poolSize
, поскольку он вызывал NumberFormatExceptions). Я обнаружил, что значения по умолчанию не заданы, а параметры находятся в форме:
poolSize = ${encryptor.poolSize:10}
или
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
а не ожидаемый
poolSize = 10
или
algorithm = "PBEWithMD5AndTripleDES"
На основе SPR-4785 должна работать надпись, такая как ${my.property:myDefaultValue}. Но это не для меня!
Спасибо