spring-boot - 在控制器初始化问题期间使用@Value Spring 注释
问题描述
可能其他人也可能问过类似的问题,但是我找不到提供有效解决方案的答案...我正在学习弹簧靴,而在我的实验中我正在玩番石榴 RateLimiter遇到以下问题:需要在控制器初始化期间创建 RateLimiter,但是如果我想加载速率,我必须对其进行硬编码,因为如果我尝试使用带有 @Value Spring 注释的属性从道具加载它,它就不起作用. 这个“限制”有什么“技巧”吗?见下面的代码:
@RestController
public class LoggingController {
private Logger logger = LoggerFactory.getLogger(LoggingController.class);
@Value("${count}")
private Double PERMITS_COUNT;
@Value("${seconds}")
private Double PERMITS_PER_SECONDS;
@Value("${consumed}")
private int PERMITS_CONSUMED;
//@ Value fails here with NullPointerException
private RateLimiter rateLimiter = RateLimiter.create(PERMITS_COUNT / PERMITS_PER_SECONDS);
// This works file
private RateLimiter rateLimiter = RateLimiter.create(10d / 60d);
private AtomicInteger index = new AtomicInteger(0);
@GetMapping("/logging")
@ResponseBody
public String logging (@RequestParam(name="name", required=false, defaultValue="JavaBoss") String name) {
//@Value works fine if used here
rateLimiter.setRate(PERMITS_COUNT / PERMITS_PER_SECONDS);
rateLimiter.acquire(PERMITS_CONSUMED);
...
提前谢谢了...
解决方案
使用 PostConstruct,你应该没问题
@RestController
public class LoggingController {
private Logger logger = LoggerFactory.getLogger(LoggingController.class);
@Value("${count}")
private Double PERMITS_COUNT;
@Value("${seconds}")
private Double PERMITS_PER_SECONDS;
@Value("${consumed}")
private int PERMITS_CONSUMED;
private RateLimiter rateLimiter;
@PostConstruct
private void createRateLimiter() {
rateLimiter = RateLimiter.create(PERMITS_COUNT / PERMITS_PER_SECONDS);
}
private AtomicInteger index = new AtomicInteger(0);
@GetMapping("/logging")
@ResponseBody
public String logging (@RequestParam(name="name", required=false, defaultValue="JavaBoss") String name) {
...
推荐阅读
- wordpress - 避免 AMP 页面 URL 上的链式重定向
- kotlin - 如何在作用域之间共享 BroadcastChannel?
- html - 如何创建任意宽度的网格项(使用间隙)?
- java - 为特定键实现 notifyAll() 和 wait()
- itext7 - Flexbox 部分使用(?)在 iTextPDF 中有效
- c# - 使用 FluentFTP 将文件从 FTP 服务器流式传输到 ASP.NET Core 中的 Web 客户端
- go - GoLang 将 webm 转换为 mp3
- ksqldb - 当查询作为流在顶部执行时,KSQL DB 是否会创建临时主题?
- awk - 如何使用bash脚本提取连续模式
- makefile - GNU make: $(foreach...) 和 $(call...) 的嵌套会产生错误:*** 多个目标模式。停止