在我的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
不存在
但是,一旦创建了架构并再次运行该应用程序,它就可以工作。因此,当我必须将应用程序部署到每次必须创建架构以运行一些集成测试的位置时,应用程序将在那里失败。
我运行顺序错误吗?
答案 0 :(得分:1)
个人资料与此处完全无关。您可以通过执行以下操作来确保在导入数据之前创建架构:
@Component("schemaCreator")
public class SchemaCreator {
@PostConstruct
public void initSchema(){
}
}
可以通过@DependsOn
批注使数据导入器依赖于正在初始化的模式。
当前bean所依赖的bean。指定的任何豆是 确保由该bean之前的容器创建。用过的 在不显式依赖bean的情况下,这种情况很少发生 另一个通过属性或构造函数参数,但是 取决于另一个bean初始化的副作用。
@DependsOn("schemaCreator")
@Component
public class DataImporter {
@PostConstruct
public void initData(){
}
}