SpringBoot项目使用@Value读取配置文件application.yml的值

SpringBoot项目使用@Value读取配置文件application.yml的值

前景:因为之前用@Value注解都是在Service里面,而Service的调用都是用的@Autowired等注解注入,所以并没有注意@Value的用法,在没有@Service等注解里使用无效时才知道

配置文件:
SpringBoot项目使用@Value读取配置文件application.yml的值_第1张图片
@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;
    }

}

你可能感兴趣的:(SpringBoot项目使用@Value读取配置文件application.yml的值)