import java.util.List;
public interface Process<E> {
List<E> determineChanges(List<Integer> approvalIds);
void applyChanges(List<E> changeCto);
}
接下来,我将读取器和写入器实现定义如下:
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@StepScope
public class GenericApprovalReader<T extends Process<U>, U> implements ItemReader<List<U>> {
private final SomeOtherBeanStepScopedBean otherBean;
private final T processor;
@Autowired
public GenericApprovalReader(SomeOtherBeanStepScopedBean otherBean,
T processor) {
this.SomeOtherBean = otherBean;
this.processor= processor;
}
@Override
public List<U> read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
List<Integer> items = this.someOtherBean.read();
if(items != null) {
return processor.determineChanges(items );
} else {
return null;
}
}
}
同样,我也有一个作家:
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@StepScope
// Note that second type parameter is necessary only due to necessity to parametrize the ItermWriter<List<U>> with the
// same type as is used for parametrization of Approval<U>
public class GenericApprovalWriter<T extends Process<U>, U> implements ItemWriter<List<U>> {
private final T processor;
@Autowired
public GenericApprovalWriter(T processor) {
this.approvalProcessor = processor;
}
@Override
public void write(List<? extends List<U>> items) throws Exception {
for(List<U> item: items) {
this.processor.applyChanges(item);
}
}
}
现在,当我尝试将步骤
中的读取器和写入器连接到某个@configuration
类中时,如下所示:
@Bean(name="firstProcessingStep")
Step firstProcessingStep(GenericApprovalReader<FirstProcessor, Item> reader,
GenericApprovalWriter<FirstProcessor, Item> writer) {
return stepBuilderFactory.get("firstProcessingStep")
.<List<Item>,List<Item>>chunk(CHUNK_SIZE)
.reader(reader)
.writer(writer)
.allowStartIfComplete(false)
.build();
}
根据另一篇关于Spring中泛型bean的Autowiring的文章,这种行为在Spring4.0之后应该是可能的,我正在使用Spring4.0。
在spring boot应用程序上下文中匹配两个或多个已加载bean的bean是自动连接的时候,会出现预期的单个匹配bean。当bean在Spring Boot中自动连接时,在上下文中会发现两个或多个bean。因此,该bean无法自动布线。考虑将其中一个bean标记为@primary,更新消费者以接受多个bean,或者使用@qualifier来标识应该使用的bean预期为单个匹配bean但找到n。
该类应该用@primary注释。带注释的@Primary类被认为是自动连线中的默认类。@Autowired注释加载@primary bean并向其添加接口或抽象变量。
像这样更改代码。
@Component
@Primary
@StepScope
public class GenericApprovalReader<T extends Process<U>, U> implements ItemReader<List<U>> {
//content
@Component
@Primary
@StepScope
GenericApprovalWriter<T extends Process<U>, U> implements ItemWriter<List<U>> {
//content
我已经浏览了http://docs.spring.io/spring-data/redis/docs/current/reference/html/,对我来说没有什么新内容。我想知道我错过了什么,我将感谢任何投入。 我使用Spring Data Redis 1.7.2.Release,Spring Boot 1.3.6.Release
我通过Spring Boot 1.1.8使用Spring 4,并创建了一个类来缓存一些数据。这个类依赖于泛型来工作,但我在Spring和将这个类自动连接为另一个服务中的bean方面遇到了问题。 我会遇到如下错误: 所涉及的班级: 类BaseRepository扩展JpaRepository如下。其他实际存储库扩展了这个。 BaseWithName类是一个MappedSuperclass,它定义名称
当试图用包含所有上下文配置的抽象类运行stepdefs时,spring看到2个不同的beans parent和step def 我使用的是Spring Booking版本:2.6.4,JUnit 5和Cucumber版本7.2.3 异常堆栈跟踪: io.cucumber.core.runtime.CucumberExecutionContext.runTestCase:没有可用的“Cucumber
我尝试自动连接我的mapstruct mapper: 这是可行的: 但是为什么我不能使用: 我得到以下错误: 导致原因:org . spring framework . beans . factory . nosuchbeandidefinitionexception:没有类型为“pl . comp . window . application . mapper . windowdtomapper
我的问题是:我有一个基本接口和两个实现类。 服务类依赖于基本接口,代码如下: 而配置是这样的: 服务类依赖于基础接口,将决定通过某些业务逻辑自动连接哪个实现。代码是这样的: 这个想法引发了一个例外:无法自动连线。有多个bean属于类型。 虽然可以使用@Qualifier来解决这个问题,但在这种情况下,我不能选择dependencies类。 我试图阅读spring文档,它提供了一个基于,但我仍然对这
问题内容: 我正在尝试构建一个全新的Spring Framework 4.0项目,而没有所有神奇的东西,而只是简单地将它踢过去。 我在这里关注该教程:http : //spring.io/guides/tutorials/data/并取得了一些成功。我只是停留在这一点上。 当我运行此单元测试时,得到以下堆栈跟踪: 根据观察和研究,似乎是在告诉我有两个EntityManager类。第一个来自hibe