Tôi cố gắng để sử dụng chú thích @value trong các thông số của một nhà xây dựng như sau:Xuân @value chú thích không sử dụng giá trị mặc định khi tài sản là không có mặt
@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) {
...
}
Khi các tập tin thuộc tính có mặt trên classpath, các các thuộc tính được nạp một cách hoàn hảo và phép thử thực hiện tốt. Tuy nhiên khi tôi loại bỏ các tập tin thuộc tính từ classpath, tôi đã có thể mong đợi rằng các giá trị mặc định sẽ được sử dụng, ví dụ poolSize sẽ được thiết lập để 10 hoặc thuật toán để PBEWithMD5AndTripleDES tuy nhiên đây không phải là trường hợp.
Chạy mã thông qua một trình gỡ lỗi (mà sẽ chỉ làm việc sau khi thay đổi @Value("${encryptor.poolSize:10}") Integer poolSize
để @Value("${encryptor.poolSize:10}") String poolSize
như nó đã gây NumberFormatExceptions) Tôi thấy rằng giá trị mặc định không được thiết lập và các thông số theo hình thức:
poolSize = ${encryptor.poolSize:10}
hoặc
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
chứ không phải là dự kiến
poolSize = 10
hoặc
algorithm = "PBEWithMD5AndTripleDES"
Dựa trên SPR-4785 ký hiệu như $ {my.property:myDefaultValue} sẽ hoạt động. Nhưng nó không xảy ra với tôi!
Cảm ơn bạn
Chính xác những gì tôi đã mất tích. Cảm ơn bạn! – garyj
... hoặc nếu sử dụng cấu hình dựa trên chú thích bằng 'PropertySourcePlaceholderConfigurer':' propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound (true); ' –