在命令调度拦截器中使用 entityManager
Used entityManager in command dispatch interceptors
我在 JPA/Spring 中使用 Axon 4.3。
我想在我的拦截器中注入 entityManager,所以我在我的配置中使用了 ContainerManagedEntityManagerProvider。但是当我 运行 我的应用程序
时出现此错误
Description: Parameter 0 of method configureCommandBus in AxonConfig
required a bean of type
'org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider'
that could not be found.
Action: Consider defining a bean of type
'org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider'
in your configuration.
@Configuration
@AutoConfigureAfter(AxonAutoConfiguration.class)
public class AxonConfig {
@Bean
public CommandBus configureCommandBus(org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider containerManagedEntityManagerProvider) {
CommandBus commandBus = SimpleCommandBus.builder().build();
commandBus.registerDispatchInterceptor(
new CatalogDispatchInterceptor(containerManagedEntityManagerProvider.getEntityManager()));
return commandBus;
}
}
public class CatalogDispatchInterceptor implements MessageDispatchInterceptor<CommandMessage<?>> {
private final EntityManager entityManager;
public CatalogDispatchInterceptor(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(
List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
(CreateCatalogCommand.class.isInstance(command.getPayloadType())) { }
return command;
};
}
}
Axon创建的ContainerManagedEntityManagerProvider
实例,如果你使用的是Spring Boot Starter,通过JpaAutoConfiguration
看起来如下:
@Bean
@ConditionalOnMissingBean
public EntityManagerProvider entityManagerProvider() {
return new ContainerManagedEntityManagerProvider();
}
因此我的第一个尝试是连接 EntityManagerProvider
而不是 ContainerManagedEntityManagerProvider
。如果这不起作用,那么您正在处理一个 Spring bean 排序问题,我认为这有点超出了 (axon) 框架的范围。当然,您总是可以自己创建 ContainerManagedEntityManagerProvider
,我很确定这会解决手头的问题。
希望任何一种解决方案都能帮助您解决问题![=16=]
我在 JPA/Spring 中使用 Axon 4.3。 我想在我的拦截器中注入 entityManager,所以我在我的配置中使用了 ContainerManagedEntityManagerProvider。但是当我 运行 我的应用程序
时出现此错误Description: Parameter 0 of method configureCommandBus in AxonConfig required a bean of type 'org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider' that could not be found.
Action: Consider defining a bean of type 'org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider' in your configuration.
@Configuration
@AutoConfigureAfter(AxonAutoConfiguration.class)
public class AxonConfig {
@Bean
public CommandBus configureCommandBus(org.axonframework.springboot.util.jpa.ContainerManagedEntityManagerProvider containerManagedEntityManagerProvider) {
CommandBus commandBus = SimpleCommandBus.builder().build();
commandBus.registerDispatchInterceptor(
new CatalogDispatchInterceptor(containerManagedEntityManagerProvider.getEntityManager()));
return commandBus;
}
}
public class CatalogDispatchInterceptor implements MessageDispatchInterceptor<CommandMessage<?>> {
private final EntityManager entityManager;
public CatalogDispatchInterceptor(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(
List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
(CreateCatalogCommand.class.isInstance(command.getPayloadType())) { }
return command;
};
}
}
Axon创建的ContainerManagedEntityManagerProvider
实例,如果你使用的是Spring Boot Starter,通过JpaAutoConfiguration
看起来如下:
@Bean
@ConditionalOnMissingBean
public EntityManagerProvider entityManagerProvider() {
return new ContainerManagedEntityManagerProvider();
}
因此我的第一个尝试是连接 EntityManagerProvider
而不是 ContainerManagedEntityManagerProvider
。如果这不起作用,那么您正在处理一个 Spring bean 排序问题,我认为这有点超出了 (axon) 框架的范围。当然,您总是可以自己创建 ContainerManagedEntityManagerProvider
,我很确定这会解决手头的问题。
希望任何一种解决方案都能帮助您解决问题![=16=]