Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring引导启动时将数据加载到Ehcache 3_Java_Spring Boot_Ehcache 3 - Fatal编程技术网

Java 在Spring引导启动时将数据加载到Ehcache 3

Java 在Spring引导启动时将数据加载到Ehcache 3,java,spring-boot,ehcache-3,Java,Spring Boot,Ehcache 3,我想在Spring启动应用程序启动时在缓存中加载数据。 我知道在Ehcache2中有一种使用BootstrapCacheLoader的集成方式。 但我在Ehcache3中看不到这一点。 我仍然可以在@postConstruct方法中手动完成。 但是我想知道是否有一个集成解决方案(Spring5,EHCache3) 谢谢。我在Spring上下文初始化之后完成了这项工作。 对于DB集合中的每个元素,我调用getResourceById(),它具有@Cacheable注释,从而填充整个DB集合的缓存

我想在Spring启动应用程序启动时在缓存中加载数据。 我知道在Ehcache2中有一种使用BootstrapCacheLoader的集成方式。 但我在Ehcache3中看不到这一点。 我仍然可以在@postConstruct方法中手动完成。 但是我想知道是否有一个集成解决方案(Spring5,EHCache3)


谢谢。

我在Spring上下文初始化之后完成了这项工作。 对于DB集合中的每个元素,我调用getResourceById(),它具有@Cacheable注释,从而填充整个DB集合的缓存

我不建议在@PostConstruct中运行这段代码,因为代理可能还没有创建,像@Cacheable这样的注释可能还没有工作

在触发ContextRefreshedEvent事件(初始化后或刷新后)时运行此代码更适合加载缓存

public class CacheLoader {

private final Logger logger = LoggerFactory.getLogger(CacheLoader.class);

@Autowired
private ResourcePermissionRepository resourcePermissionRepository;
@Autowired
private ResourcePermissionService resourcePermissionService;


@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
    logger.info("Loading cache following start/refresh event");
    for (PermissionGroup permissionGroup : permissionGroupRepository.findAll()) {
        permissionGroupService.getGroupById(permissionGroup.getGroupName());
    }

    for(ResourcePermission resourcePermission: resourcePermissionRepository.findAll()) {
        resourcePermissionService.getResourceById(resourcePermission.getResourceId());
    }
    logger.info("Finished loading cache");
}


public class ResourcePermissionService {

private final Logger logger = LoggerFactory.getLogger(ResourcePermissionService.class);

@Autowired
private ResourcePermissionRepository resourcePermissionRepository;


@Cacheable(value = "resources", sync = true)
 public ResourcePermission getResourceById(String resourceId) {
    logger.info("Cache miss for resource " + resourceId);
    return resourcePermissionRepository.findById(resourceId).orElse(new NullResourcePermission());
}

@CachePut(value = "resources", key = "#result.resourceId")
public ResourcePermission addResourcePermission(ResourcePermission resourcePermission) {
    return resourcePermissionRepository.save(resourcePermission);
}

@CacheEvict(value = "resources")
public void deleteById(String resourceId) {
    resourcePermissionRepository.deleteById(resourceId);
}
}