SpringBoot项目使用@Value读取配置文件application.yml的值
前景:因为之前用@Value注解都是在Service里面,而Service的调用都是用的@Autowired等注解注入,所以并没有注意@Value的用法,在没有@Service等注解里使用无效时才知道
配置文件:
@Value的正确使用法
1. 使用@value的类中必须被@Service或@Component注解
2. 字段对象也不能用static修饰,如果用了就要用set方法来赋值
@Component
public class ImageRecognition {
//static示例
//public static String APP_ID;
//@Value("${image.recognition.appid}")
//public void setApiId(String apiId) {
// APP_ID= apiId;
//}
//设置APPID/AK/SK
@Value("${image.recognition.appid}")
public String APP_ID;
@Value("${image.recognition.apikey}")
public String API_KEY;
@Value("${image.recognition.secretkey}")
public String SECRET_KEY;
public AipImageClassify newInstance() {
//初始化一个AipImageClassify
AipImageClassify client = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
return client;
}
}
3. 对象必须使用@Autowired、@Resource注入,才能正常使用@Value注解(不能用new的对象)
@Controller
@RequestMapping(KSP_CONST.SECURITY_PREFIX + "image/")
public class ImageController {
@Autowired
private ImageRecognition imageRecognition;
@ResponseBody
@RequestMapping("queryImageDetect")
public List<Map> queryImageDetect() {
//ImageRecognition imageRecognition = new ImageRecognition();
List<Map> mapList = imageRecognition.animalDetect("C:\\Users\\ksxx\\Desktop\\timg.jpg");
return mapList;
}
}