Java com.example.RedisApplication中方法存储库的参数0需要找不到类型的bean

Java com.example.RedisApplication中方法存储库的参数0需要找不到类型的bean,java,redis,jedis,spring-data-redis,Java,Redis,Jedis,Spring Data Redis,我在Spring Boot+Spring Data Redis上做POC,参考并简单地遵循教程,使用Spring Boot版本2.1.0。RELEASE而不是2.0.0。RELEASE 我只是将Redis缓存更新到DB中,并得到以下错误 *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method repositori

我在Spring Boot+Spring Data Redis上做POC,参考并简单地遵循教程,使用Spring Boot版本
2.1.0。RELEASE
而不是
2.0.0。RELEASE

我只是将Redis缓存更新到DB中,并得到以下错误

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method repositories in com.example.RedisApplication required a bean of type 'com.example.RedisApplication$LineItemRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.RedisApplication$LineItemRepository' in your configuration.
RedisApplication.java

@Log
@SpringBootApplication
public class RedisApplication {

    private ApplicationRunner titleRunner(String title, ApplicationRunner rr) {
        return args -> {
            log.info(title.toUpperCase() + ":");
            rr.run(args);
        };
    }

    @Bean
    ApplicationRunner geography(RedisTemplate<String, String> rt) {
        return titleRunner("geography", args -> {
            GeoOperations<String, String> geo = rt.opsForGeo();
            geo.add("Sicily", new Point(13.361389, 38.155556), "Arigento");
            geo.add("Sicily", new Point(15.087269, 37.502669), "Catania");
            geo.add("Sicily", new Point(13.583333, 37.316667), "Palermo");

            Circle circle = new Circle(new Point(13.583333, 37.316667),
                    new Distance(100, RedisGeoCommands.DistanceUnit.KILOMETERS));
            GeoResults<GeoLocation<String>> radius = geo.radius("Sicily", circle);
            radius.getContent().forEach(c -> log.info(c.toString()));
        });
    }

    @Bean
    ApplicationRunner repositories(LineItemRepository  lineItemRepository) {
        return titleRunner("repositories", args -> {
            Long orderId = generateId();

            List<LineItem> itemsList = Arrays.asList(
                    new LineItem(orderId, generateId(), "plunger"),
                    new LineItem(orderId, generateId(), "soup"), 
                    new LineItem(orderId, generateId(), "cofee mug"));

            itemsList.stream().map( lineItemRepository::save).forEach(li -> log.info(li.toString()));
        });
    }

    private Long generateId() {
        long tmp = new Random().nextLong();
        return Math.max(tmp, tmp * -1);
    }

    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @RedisHash("orders")
    public class Order implements Serializable {
        @Id
        private Long Id;

        @Indexed
        private Date when;

        @Reference
        private List<LineItem> lineItems;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @RedisHash("lineItems")
    public class LineItem implements Serializable {
        @Indexed
        private Long orderId;

        @Id
        private Long id;

        private String description;
    }

    interface LineItemRepository extends CrudRepository<LineItem, Long> {

    }

    interface OrderRepository extends CrudRepository<Order, Long> {
        Collection<Order> findByWhen(Date date);
    }
}
@Log
@SpringBoot应用程序
公共类应用程序{
专用ApplicationRunner标题运行程序(字符串标题,ApplicationRunner rr){
返回参数->{
log.info(title.toUpperCase()+“:”);
rr.run(args);
};
}
@豆子
ApplicationRunner地理位置(Redistrt模板){
返回标题Runner(“地理”,args->{
GeoOperations geo=rt.optsforgeo();
地理添加(“西西里岛”,新点(13.361389,38.155556),“阿里根托”);
地理添加(“西西里岛”,新点(15.087269,37.502669),“卡塔尼亚”);
地理添加(“西西里岛”,新点(13.583333,37.316667),“巴勒莫”);
圆=新圆(新点(13.583333,37.316667),
新距离(100,redieoCommands.DistanceUnit.km);
地理结果半径=地理半径(“西西里岛”,圆圈);
radius.getContent().forEach(c->log.info(c.toString());
});
}
@豆子
ApplicationRunner存储库(LineItemRepository LineItemRepository){
返回标题Runner(“存储库”,args->{
Long orderId=generateId();
List itemsList=Arrays.asList(
新的行项目(orderId,generateId(),“柱塞”),
新的行项目(orderId,generateId(),“soup”),
新的行项目(orderId,generateId(),“咖啡杯”);
itemsList.stream().map(lineItemRepository::save).forEach(li->log.info(li.toString());
});
}
私有长生成ID(){
long tmp=new Random().nextLong();
返回数学最大值(tmp,tmp*-1);
}
公共静态void main(字符串[]args){
run(RedisApplication.class,args);
}
@资料
@AllArgsConstructor
@诺尔格构装师
@重新散列(“订单”)
公共类顺序实现可序列化{
@身份证
私人长Id;
@索引
私人日期;
@参考文献
专用列表行项目;
}
@资料
@AllArgsConstructor
@诺尔格构装师
@重新散列(“行项目”)
公共类LineItem实现可序列化{
@索引
私有长orderId;
@身份证
私人长id;
私有字符串描述;
}
接口LineItemRepository扩展了Crudepository{
}
接口OrderRepository扩展了Crudepository{
在何时(日期)找到集合;
}
}

我能够解决这个问题。不知何故,订单和行项目的存储库引用不可用。所以我只是将POJO和Repository类从main方法中移出

RedisApplication.java

@Log
@SpringBootApplication
public class RedisApplication {

    @Autowired
    private OrderRepository orderRepository;
    @Autowired
    private LineItemRepository lineItemRepository;

    private ApplicationRunner titleRunner(String title, ApplicationRunner rr) {
        return args -> {
            log.info(title.toUpperCase() + ":");
            rr.run(args);
        };
    }

    @Bean
    ApplicationRunner geography(RedisTemplate<String, String> rt) {
        return titleRunner("geography", args -> {
            GeoOperations<String, String> geo = rt.opsForGeo();
            geo.add("Sicily", new Point(13.361389, 38.155556), "Arigento");
            geo.add("Sicily", new Point(15.087269, 37.502669), "Catania");
            geo.add("Sicily", new Point(13.583333, 37.316667), "Palermo");

            Circle circle = new Circle(new Point(13.583333, 37.316667),
                    new Distance(100, RedisGeoCommands.DistanceUnit.KILOMETERS));

            GeoResults<GeoLocation<String>> radius = geo.radius("Sicily", circle);
            radius.getContent().forEach(c -> log.info(c.toString()));
        });
    }

    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }



    @Bean
    ApplicationRunner repositories() {
        return titleRunner("repositories", args -> {
            Long orderId = generateId();

            List<LineItem> itemsList = Arrays.asList(
                        new LineItem(orderId, generateId(), "plunger"),
                        new LineItem(orderId, generateId(), "soup"), 
                        new LineItem(orderId, generateId(), "cofee mug"));

            itemsList.stream().map(lineItemRepository::save).forEach(li -> log.info(li.toString()));

            Order order = new Order(orderId, new Date(), itemsList);
            orderRepository.save(order);

            Collection<Order> found = orderRepository.findByWhen(order.getWhen());
            found.forEach(o -> log.info("found : " + o.toString()));
        });
    }

    private Long generateId() {
        long tmp = new Random().nextLong();
        return Math.max(tmp, tmp * -1);
    }
}
2018-11-08 12:25:23.469  INFO 4380 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-08 12:25:23.473  INFO 4380 --- [           main] com.example.RedisApplication             : Started RedisApplication in 4.272 seconds (JVM running for 5.071)
2018-11-08 12:25:23.473  INFO 4380 --- [           main] com.example.RedisApplication             : GEOGRAPHY:
2018-11-08 12:25:23.497  INFO 4380 --- [           main] com.example.RedisApplication             : GeoResult [content: RedisGeoCommands.GeoLocation(name=Palermo, point=null), distance: 0.0, ]
2018-11-08 12:25:23.497  INFO 4380 --- [           main] com.example.RedisApplication             : GeoResult [content: RedisGeoCommands.GeoLocation(name=Arigento, point=null), distance: 0.0, ]
2018-11-08 12:25:23.497  INFO 4380 --- [           main] com.example.RedisApplication             : REPOSITORIES:
2018-11-08 12:25:23.581  INFO 4380 --- [           main] com.example.RedisApplication             : LineItem(orderId=3202446132704215083, id=1657375889205537882, description=plunger)
2018-11-08 12:25:23.589  INFO 4380 --- [           main] com.example.RedisApplication             : LineItem(orderId=3202446132704215083, id=5508942963105786137, description=soup)
2018-11-08 12:25:23.593  INFO 4380 --- [           main] com.example.RedisApplication             : LineItem(orderId=3202446132704215083, id=2166030250698224804, description=cofee mug)
2018-11-08 12:25:23.665  INFO 4380 --- [           main] com.example.RedisApplication             : found : Order(Id=3202446132704215083, when=Thu Nov 08 12:25:23 IST 2018, lineItems=[LineItem(orderId=3202446132704215083, id=1657375889205537882, description=plunger), LineItem(orderId=3202446132704215083, id=5508942963105786137, description=soup), LineItem(orderId=3202446132704215083, id=2166030250698224804, description=cofee mug)])