接手一個任務開發預警郵件需求,計划將郵件信息(hostName,用戶名,密碼,發送方,接受方等)設置為可配置變量,配置在配置中心,使用@Value注解獲取配置,如下:
@Value("${warning.email.hostName}") private String hostName; @Value("#{'${warning.email.receivers}'.split(',')}") private List<String> receivers; @Value("${warning.email.userName}") private String userName; @Value("${warning.email.passWord}") private String passWord; @Value("${warning.email.sendFrom}") private String sendFrom;
以上為正確配置方式,發生錯誤的情況是將這些變量全部聲明為了靜態變量,導致取值全部為空:
@Value("${warning.email.hostName}") private static String hostName;
上網查詢了下使用@Value的注意事項:
1.不能作用於靜態變量(static);
2.不能作用於常量(final);
3.不能在非注冊的類中使用(類需要被注冊在spring上下文中,如用@Service,@RestController,@Component等);
4.使用這個類時,只能通過依賴注入的方式,用new的方式是不會自動注入這些配置的。