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

时间:2019-01-14 19:06:01

标签: spring-boot postconstruct

当前,我有一个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'类型的合格Bean

1 个答案:

答案 0 :(得分:1)

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

https://flywaydb.org/

https://www.liquibase.org/

不能自动装配的原因是您尚未实现该接口,也未从实现中创建bean。当然,您可能会认为,如果仅创建一个接口并使用@Repository对其进行批注,那么它将立即可用,但事实并非如此。

如果要将Spring Data用于存储库层,则需要一个实体,并且至少需要扩展CrudRepository

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