Springmoot многомодульный проект - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь получить чистый многомодульный проект Springboot Maven. Я использую springboot 2.0.1.RELEASE

То, чего я хочу достичь, похоже на это: SpringBootMultipleMavenModules

Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность вставлять свои зависимости в любые модули.

Например, в этом классе: DBSeeder.java выглядит следующим образом:

private HotelRepository hotelRepository;

public DbSeeder(HotelRepository hotelRepository){
    this.hotelRepository = hotelRepository;
}
..

Я бы хотел использовать вместо:

@Autowired
private HotelRepository hotelRepository;

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

@SpringBootApplication
@EnableJpaRepositories(basePackages = {"rc"})
@EntityScan(basePackages = {"rc"})
@ComponentScan(basePackages = {"rc"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Любая идея, которая может связать меня с решением, будет приветствоваться.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Рабочий раствор доступен здесь . @Component отсутствует в сущности. Очевидно, что bean-компоненты следует вводить не так, как здесь, а создавать их экземпляры (например, marriot = new Hotel("Marriot", 5, true);) и сохранять с помощью метода save (или saveAll для коллекции)

Внедрение сущностей с единственной целью инициализации неверно и не будет работать: Один и тот же экземпляр будет повторно использоваться для каждого отеля.

@Autowired
private Hotel marriot, ibis, goldenTulip;

@Override
public void run(String... strings) throws Exception {

    marriot.setName("Marriot");
    marriot.setClassification(5);
    marriot.setOpen(true);

    ibis.setName("Ibis");
    ibis.setClassification(3);
    ibis.setOpen(false);

    goldenTulip.setName("Golden Tulip");
    goldenTulip.setClassification(4);
    goldenTulip.setOpen(true);

    List<Hotel> hotels = new ArrayList<>();
    hotels.add(marriot);
    hotels.add(ibis);
    hotels.add(goldenTulip);

    this.hotelRepository.saveAll(hotels);
}

Результатом будет сохранение одного объекта, так как все 3 отеля являются одним и тем же экземпляром. Таким образом, http://localhost:8080/hotels вернет:

[{"id":1,"name":"Golden Tulip","classification":4,"open":true}]

Пока это с экземпляром

@Override
public void run(String... strings) throws Exception {
    marriot = new Hotel("Marriot", 5, true);
    ibis = new Hotel("Ibis", 3, false);
    goldenTulip = new Hotel("Golden Tulip", 4, true);

    List<Hotel> hotels = new ArrayList<>();
    hotels.add(marriot);
    hotels.add(ibis);
    hotels.add(goldenTulip);

    this.hotelRepository.saveAll(hotels);
}

он вернется, как и 3 сущности:

[{"id":1,"name":"Marriot","classification":5,"open":true},{"id":2,"name":"Ibis","classification":3,"open":false},{"id":3,"name":"Golden Tulip","classification":4,"open":true}]

Это именно то, что я хотел увидеть здесь, но забыл добавить @Component в класс Entity. Не должен этого делать!

EDIT: Причиной попытки было использование сервисного уровня:

public interface NoteService {
    List<Note> loadAll();
}
@Service
public class NoteServiceImpl implements NoteService {

  @Autowired
  private NoteRepository noteRepository;

  @Override
  public List<Note> loadAll() {
    return noteRepository.findAll();
  }
}

Что привело к сбою во время выполнения, Note не является управляемым компонентом.

0 голосов
/ 26 апреля 2018

Глядя на свой код, вы не можете Autowire a Hotel bean-компонент, потому что он не зарегистрирован должным образом.

https://github.com/IDCS1426/SpringBootMultipleMavenModules/blob/master/domain/src/main/java/rc/domain/Hotel.java#L10

Вам нужно добавить туда @Component, чтобы иметь возможность ввести его в https://github.com/IDCS1426/SpringBootMultipleMavenModules/blob/master/persistence/src/main/java/rc/persistence/DbSeeder.java#L21

Кроме того, проект никогда не будет компилироваться, поскольку вы добавляете несуществующий модуль: https://github.com/IDCS1426/SpringBootMultipleMavenModules/blob/master/pom.xml#L14. Вам необходимо удалить это:).

Сказав все это, мне очень странно, как вы пытаетесь ввести Entity подобным образом, но это не является частью этого вопроса.

При этом код компилируется просто отлично.

...