如何使用@Postconstruct 来加载一些数据

How to use @Postconstruct in order to load some data

目前,我有一个 import.sql,我用它在我的数据库中导入一些测试数据。现在,我想把它带到我们的生产系统中,到目前为止我读到的是我不应该在生产中使用 import.sql。

因此,我想我可以用@Postconstruct 创建一些东西。

因此,我在主应用程序 class 中创建了类似的东西:

@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);
}

但是,一旦我尝试在主 class 中自动装配 repo,我总是会遇到以下异常:

No qualifying bean of type 'x.y.z.repository.ICreateUserAtStartup' available

为什么不为此目的使用特定的迁移工具,例如 Flyway 或 Liquibase?

https://flywaydb.org/

https://www.liquibase.org/

它不能自动装配的原因是你还没有实现那个接口并从实现中创建了一个bean。当然你可能会认为,如果你只是创建一个接口并用 @Repository 注释它,它会开箱即用,但事实并非如此。

如果您想为存储库层使用 Spring 数据,您将需要一个实体,并且至少需要扩展 CrudRepository

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