Как использовать @Postconstruct для загрузки некоторых данных - PullRequest
0 голосов
/ 14 января 2019

В настоящее время у меня есть import.sql, с помощью которого я импортирую некоторые тестовые данные в свою базу данных. Теперь я хочу перенести его в нашу производственную систему, и до сих пор я читал, что не должен использовать import.sql в производственной среде.

Поэтому я подумал, что могу создать что-то с помощью @ Postconstruct.

Поэтому я создал в основном классе приложения что-то подобное:

@Autowired
ICreateUserAtStartup repo;

@PostConstruct
public void initIt() throws Exception {
    Rolle r = new Rolle();
    r.setBezeichnung("xxx");
    r.setId(1L);
    r.setCreatedAt(new Date(2019, 01, 14));

    repo.insertRolle(1L, "xxx");   
}

В отдельном файле я создал следующий интерфейс:

@Repository
public interface ICreateUserAtStartup {

    @Modifying
    @Query("insert into benutzer(id, created_at, anzeigename, 
    benutzername, dienstnummer, active, passwort) SELECT :id, 
    :created_At, :anzeigename, :benutzername, :dienstnummer, :active, 
    :passwort")

    void insertBenutzer(@Param("id") Long id, @Param("created_at") 
    String created_at, @Param("anzeigename") String anzeigename, 
    String benutzername, String dienstnummer, Boolean active, String password);

    @Modifying
    @Query("insert into rolle(id, bezeichnung) SELECT (:id, 
    :bezeichnung)")
    void insertRolle(@Param("id") Long id, @Param("bezeichnung") 
    String bezeichnung);
}

Однако, как только я пытаюсь выполнить автоматическое репо в своем основном классе, я всегда получаю следующее исключение:

Нет подходящего компонента типа 'x.y.z.repository.ICreateUserAtStartup'

1 Ответ

0 голосов
/ 14 января 2019

Почему бы вам не использовать для этой цели специальный инструмент миграции, такой как Flyway или Liquibase?

https://flywaydb.org/

https://www.liquibase.org/

Причина, по которой он не может быть подключен автоматически, заключается в том, что вы не реализовали этот интерфейс и не создали бин из реализации. Конечно, вы можете подумать, что если вы просто создадите интерфейс и аннотируете его с помощью @Repository, он будет работать «из коробки», но это не так.

Если вы хотите использовать Spring Data для своего уровня хранилища, вам понадобится сущность, и вам нужно расширить как минимум CrudRepository.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories

...