Исключение нулевого указателя MongoTemplate в классе - PullRequest
0 голосов
/ 01 июня 2018

Я искал другие ответы, но, похоже, ни один из них мне не помог, у меня есть приложение с загрузочной пружиной, где я использую mongo и kafka.В основном классе, где мой метод run(), я могу @Autowired mongoTemplate, и он работает, но затем в другом классе я сделал то же самое, и я получаю исключение нулевого указателя на mongoTemplate.

Здесьоба класса:

Работает

@SpringBootApplication
public class ProducerConsumerApplication implements CommandLineRunner {

public static Logger logger = LoggerFactory.getLogger(ProducerConsumerApplication.class);

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

@Autowired
private Sender sender;

@Autowired
MongoTemplate mongoTemplate;


@Override
public void run(String... strings) throws Exception {
    Message msg = new Message();
    msg.setCurrentNode("my_node");
    msg.setStartTime(System.currentTimeMillis());
    String json = "{ \"color\" : \"Orange\", \"type\" : \"BMW\" }";
    ObjectMapper objectMapper = new ObjectMapper();
    msg.setTest(objectMapper.readValue(json, new TypeReference<Map<String,Object>>(){}));
    sender.send(msg);

    mongoTemplate.createCollection("test123");
    mongoTemplate.dropCollection("test123");



}

Не работает

@Component
public class ParentNode extends Node{
@Autowired
public MongoTemplate mongoTemplate;

public void execute(Message message) {

    try{

        // GET WORKFLOWS COLLECTION
        MongoCollection<Document> collection = mongoTemplate.getCollection("workflows"); 


    } catch(Exception e){
        e.printStackTrace();
    }
}

}

Спасибо за помощь.Это высоко ценится.

1 Ответ

0 голосов
/ 01 июня 2018

вы можете попробовать ввести зависимость с помощью сеттера или конструктора:

Метод 1:

@Component
public class ParentNode extends Node{

  @Autowired
  public ParentNode(MongoTemplate mongoTemplate){
    this.mongoTemplate = mongoTemplate;
  }

  private final MongoTemplate mongoTemplate;

  public void execute(Message message) {

  try{

      // GET WORKFLOWS COLLECTION
      MongoCollection<Document> collection = mongoTemplate.getCollection("workflows"); 


  } catch(Exception e){
      e.printStackTrace();
  }
}

Метод 2:

@Component
public class ParentNode extends Node{

  @Autowired
  public void setMongoTemplate(MongoTemplate mongoTemplate){
    ParentNode.mongoTemplate = mongoTemplate;
  }

  static private MongoTemplate mongoTemplate;

  public void execute(Message message) {

  try{

      // GET WORKFLOWS COLLECTION
      MongoCollection<Document> collection = mongoTemplate.getCollection("workflows"); 


  } catch(Exception e){
      e.printStackTrace();
  }
}
...