2016-11-07 3 views
0

Я хочу разработать небольшое тестовое приложение, используя Spring Boot и Spring Data MongoDB. Итак, в этом случае я использую конфигурацию по умолчанию (например, localhost: 27017/test database), и я стараюсь следовать руководству по весне (https://spring.io/guides/gs/accessing-data-mongodb/).Весенние данные загрузки MongoDB - Репозиторий имеет значение

я запускаю мое приложение, как это:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 

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

    @Override 
    public void run(String... strings) throws Exception { 
     (new DummyClass()).load(); 
    } 
} 

DummyClass выглядит следующим образом:

@org.springframework.stereotype.Component 
@ConfigurationProperties(prefix="dummy") 
public class DummyClass { 

    private static String url; 
    private List<Project> projects; 


    @Autowired 
    private ProjectRepository projectRepository; 


    public void setUrl(String url) { 
     DummyClass.url = url; 
    } 


    @Override 
    public void load() { 

     // (...) creating some project objects 

     projectRepository.deleteAll(); 
     projectRepository.save(this.projects); 
    }  
} 

Когда оператор projectRepository.deleteAll() выполняется, я получаю NullPointerException ип.

Для получения дополнительной информации, ниже ProjectRepository интерфейса:

public interface ProjectRepository extends MongoRepository<Project, String>  
{ 
} 

И мой пакет структура: com.test.dummy Application.java com.test.dummy.components DummyClass.java ком. test.dummy.domain Project.java com.test.dummy.repositories ProjectRepository.java

Можете ли вы помочь мне understa Моя ошибка?

Примечание: Я использую Spring бутсу 1.4.1 и Монго 3.2

+0

Ну ваш метод Application # прогон выглядит weired. Никогда не видел этого раньше. Можете ли вы удалить его и повторить попытку? Редактировать: хорошо это одето. Вы создаете объект с новым DummyClass(). Это противоречит принципам IoC и DI – smsnheck

+0

Спасибо, ты совершенно прав. Дерьмо случается, когда у тебя нос к точильному камню ... ;-) –

ответ

1

Внутри вашего метода Application.run() инстанцировании ваши DummyClass вне контекста Spring (new DummyClass()). Таким образом,

@Autowired 
private ProjectRepository projectRepository; 

не был образован.

Вы должны ввести свой DummyClass через Spring и не создавать новый экземпляр его через свой конструктор.

Пример:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 

    @Autowired 
    DummyClass dummyClass; 

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

    @Override 
    public void run(String... strings) throws Exception { 
     dummyClass.load(); 
    } 
} 
+0

Конечно, ну ... гул гул извините за неудобства ;-) –

Смежные вопросы