【发布时间】:2021-09-05 05:07:04
【问题描述】:
我有一个在 JBOSS 上运行的 Java 应用程序。 此应用程序从多个 API 获取数据并将其显示在网页上。
我想缓存数据,这样就不需要每次有人打开我的网页时都调用 API。
我想将 5 个列表或字符串缓存 5 分钟。没有数据库有什么办法吗?
【问题讨论】:
-
你用的是什么框架?
我有一个在 JBOSS 上运行的 Java 应用程序。 此应用程序从多个 API 获取数据并将其显示在网页上。
我想缓存数据,这样就不需要每次有人打开我的网页时都调用 API。
我想将 5 个列表或字符串缓存 5 分钟。没有数据库有什么办法吗?
【问题讨论】:
您可以使用http会话来持久化信息
例子
HttpSession misession= request.getSession(true);
Producto miproducto= new Producto(1,"telefono",300);
misession.setAttribute("producto",miproducto);
链接
文档
如果你使用的是springboot
您可以使用带有应用注释的单例
@Configuration
public class AppConfig {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public PrototypeBean prototypeBean() {
return new PrototypeBean();
}
@Bean
public SingletonBean singletonBean() {
return new SingletonBean();
}
}
public class SingletonBean {
// ..
@Autowired
private PrototypeBean prototypeBean;
public SingletonBean() {
logger.info("Singleton instance created");
}
public PrototypeBean getPrototypeBean() {
logger.info(String.valueOf(LocalTime.now()));
return prototypeBean;
}
}
public static void main(String[] args) throws InterruptedException {
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(AppConfig.class);
SingletonBean firstSingleton = context.getBean(SingletonBean.class);
PrototypeBean firstPrototype = firstSingleton.getPrototypeBean();
// get singleton bean instance one more time
SingletonBean secondSingleton = context.getBean(SingletonBean.class);
PrototypeBean secondPrototype = secondSingleton.getPrototypeBean();
isTrue(firstPrototype.equals(secondPrototype), "The same instance should be returned");
}
如果你使用底漆面,你可以使用@ApplicationScoped
@ApplicationScoped
应用程序范围的托管 bean 实例与 Web 应用程序本身的生命周期相关联。在整个 Web 应用程序中只有一个应用程序范围的托管 bean 实例。它与 Singleton EJB 不同但相似。
【讨论】: