我正在使用Spring Boot数据jpa和hazelcast开发Spring Boot 2.4.1项目。我正试图建立一个分布式地图,并读取数据库。我已经实现了com。黑兹卡斯特。地图MapLoader
,但当我尝试运行应用程序时,由于循环依赖关系,它无法启动。似乎JpaRepository需要HazelcastInstance首先可用,但HazelcastInstance需要MapLoader,MapLoader反过来需要JpaRepository准备就绪。至少从日志和这篇文章来看是这样的。
有人知道如何解决这个问题吗?
波姆。xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>4.1.1</version>
</dependency>
配置:
@Configuration
public class HZConfig {
@Bean
Config config(RVOLoader rvoLoader) {}
Config config = new Config();
config.getMapConfig("rvoMap").getMapStoreConfig().setImplementation(rvoLoader);
config.getMapConfig("rvoMap").getMapStoreConfig()
.setInitialLoadMode(MapStoreConfig.InitialLoadMode.EAGER);
return config;
}
@Bean
HazelcastInstance hazelcastInstance(Config config) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
return hz;
}
}
地图加载器:
@Component
public class MyResourceMapLoader implements MapLoader<Long, MyResource> {
private final MyResourceRepository repo;
public MyResourceMapLoader(MyResourceRepository repo) {
this.repo = repo;
}
@Override
public MyResource load(Long key) {
return this.repo.findById(key).orElse(null);
}
@Override
public Map<Long, MyResource> loadAll(Collection<Long> keys) {
Map<Long, MyResource> myResourceMap = new HashMap<>();
for (Long key : keys) {
MyResource myResource = this.load(key);
if (myResource != null) {
myResourceMap.put(key, myResource);
}
}
return myResourceMap;
}
@Override
public Iterable<Long> loadAllKeys() {
return this.repo.findAllIds();
}
}
JpaRepository:
java prettyprint-override">@Repository
public interface MyResourceRepository extends JpaRepository<MyResource, Long> {
List<MyResource> findAll();
@Query("SELECT m.id from MyResource m")
Iterable<Long> findAllIds();
}
一个解决方案,
@Bean
public Config config(YourMapStoreFactory yourMapStoreFactory) {
...
config.getMapConfig("rvoMap").getMapStoreConfig().setFactoryImplementation(yourMapStoreFactory);
使地图存储工厂成为组件,而不是地图存储
@Component
public class YourMapStoreFactory implements MapStoreFactory {
@Autowired
private MyResourceRepository repo;
public MapLoader newMapStore(String mapName, Properties properties) {
if (mapName.equals("rvoMap") {
return new MyResourceMapLoader(repo);
问题内容: 我正在尝试使用jQuery的循环来遍历此JSON并将其添加到named中。JSON如下: 我通过使用以下代码获取此JSON: 有什么办法吗? 问题答案: 尝试(未试用): 我想了三个独立的循环,因为您可能希望对每个数据集进行不同的处理(justIn,recent,old)。如果没有,您可以执行以下操作:
本文向大家介绍带有@Transactional和@Async的循环依赖问题的解决,包括了带有@Transactional和@Async的循环依赖问题的解决的使用技巧和注意事项,需要的朋友参考一下 今天我们来探讨一个有意思的spring源码问题,也是一个学生告诉了我现象我从源码里面找到了这个有意思的问题。 首先我们看service层的代码案例,如下: 在transation方法上面加上了@Trans
我在用Guice辅助注射。下面是一个标准场景: 现在,我可以使用Guice factory调用,并通过Guice注入的实例轻松获得我的实例。 我的问题是:如果我希望引用正在创建的的实例,该怎么办?换句话说,我想要: 我当前的解决办法相当难看:我手动创建了一个,而不使用,然后使用获取实例,并在实例上调用方法。啊!
我正在尝试填充一个名为的组件中的数组,它是的数组。每个还有一个列表。 因此,目前,我正在处理两个api调用,它们是: 和 我使用获取所有进程,并首先填充数组。然后我使用每个的进程id来调用第二个API,以获取该进程的任务。 当前,我的代码看起来如下所示: 我知道我可以创建一个observables数组,并使用等待所有这些异步调用完成,但我希望能够为每个调用定义订阅回调函数,因为我需要对的引用。我有
问题内容: 我需要创建一个包含100个数字(1-100)的数组,然后计算所有数字将是多少(1 + 2 + 3 + 4 + .. + 100 =总和)。 我不想手动将这些数字输入到数组中,因为要花100个点才能花费一些时间,并且花费更多的代码。 我在想像使用变量++直到100,然后计算所有这些的总和。不知道将如何写。但是,它在数组中很重要,因此我以后也可以说“数组55多少钱”,我可以很容易地看到它。
对Java来说很新鲜,我在大学的一个入门班做一个项目。我正在尝试做一个方法,在String数组中搜索输入的状态并返回索引。如果用户输入不在数组中的查询,我希望它要求一个新的状态来搜索。我的例外是说“变量statePotion可能尚未初始化。”下面是代码。 提前谢谢!