首页 > 解决方案 > JBoss 上的 Java 缓存

问题描述

我有一个在JBOSS上运行的 Java 应用程序。此应用程序从多个API获取数据并将其显示在网页上。

我想缓存数据,因此每次有人打开我的网页时都不需要调用 API。

我想缓存 5 个列表或字符串 5 分钟。没有数据库有什么办法吗?

标签: javacachingjboss

解决方案


您可以使用 http 会话来持久化信息

例子

HttpSession misession= request.getSession(true);
Producto miproducto= new Producto(1,"telefono",300);
misession.setAttribute("producto",miproducto);

关联

HttpSession JBoss

文档

乔布斯

如果您使用的是 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 不同但相似。

辛格尔顿


推荐阅读