我创建了一个Filter,它肯定会在每个请求中被调用。我有一个数据库调用:dbService.getNeeded()
。如何只进行一次调用并在整个筛选器调用中使用它?
public class MyFilter extends OncePerRequestFilter {
@Autowired
private DBService dbService;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
boolean isNeeded = dbService.getNeeded();
if (isNeeded) {
// do something
}
}
}
我的建议是在application.properties文件而不是DBService中设置isNeeded的值。这样,在整个应用程序运行之前,它将始终是一个单一的值。
您可以在过滤器中使用@Value注释,并在src/main/resources/application.properties中有一个值:
应用程序属性
isNeeded=true
使用@Value注释更新代码
public class MyFilter extends OncePerRequestFilter {
@Value("${isNeeded}")
private boolean isNeeded;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
if (isNeeded) {
// do something
}
}
}
还有其他选项可以从其他属性文件中读取属性。阅读此处:
如何使用Spring Boot 从java属性文件读取数据