使用CommandLineRunner弹簧启动创建架构

时间:2019-02-08 10:53:07

标签: java spring spring-boot spring-mvc

在我的Spring Boot应用程序中,我使用CommandLineRunner创建一个新的架构,然后他们导入一些测试数据。

@Profile("create-schema")
@Component
public class CreateSchema {
    // creating schema inside. This works because I can see from the database
}

@Profile("import-data")
@Component
public class DataImporter {
}

这是application.properties中的序列

spring.profiles.active=${SPRING_PROFILE}, create-schema, import-data

并在application.properties中使用它

spring.jpa.properties.hibernate.default_schema=simba

在应用程序启动后开始创建架构;创建架构后,将开始导入数据。

运行导入数据时,出现错误

  

关系schema_name.table_name不存在

但是,一旦创建了架构并再次运行该应用程序,它就可以工作。因此,当我必须将应用程序部署到每次必须创建架构以运行一些集成测试的位置时,应用程序将在那里失败。

我运行顺序错误吗?

1 个答案:

答案 0 :(得分:1)

个人资料与此处完全无关。您可以通过执行以下操作来确保在导入数据之前创建架构:

@Component("schemaCreator")
public class SchemaCreator {

    @PostConstruct
    public void initSchema(){

    }
}

可以通过@DependsOn批注使数据导入器依赖于正在初始化的模式。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/DependsOn.html

  

当前bean所依赖的bean。指定的任何豆是   确保由该bean之前的容器创建。用过的   在不显式依赖bean的情况下,这种情况很少发生   另一个通过属性或构造函数参数,但是   取决于另一个bean初始化的副作用。

@DependsOn("schemaCreator")
@Component
public class DataImporter {

    @PostConstruct
    public void initData(){

    }
}