java 动态schema_java-在Spring上下文之前动态创建schema.sql

我正在为项目编写集成测试,我想在Spring将其迁移到数据库之前将所有数据库迁移脚本合并到schema.sql中.

为此,我使用一个小类,该类在项目中搜索sql文件并将其合并为一个.

我已经创建了这样的套件:

@RunWith(Suite.class)

@Suite.SuiteClasses({MyTests.class})

public class SuiteTest {

@BeforeClass

public static void setUp() throws IOException {

RunMigrations.mergeMigrations();//this one merges all sqls into one file, called schema.sql

}

}

然后,这是我的测试:

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest(classes = App.class)

@ActiveProfiles(resolver = CustomActiveProfileResolver.class)

@ContextConfiguration(classes = App.class)

public class MyTests extends AbstractTransactionalJUnit4SpringContextTests {

@PostConstruct

public void before() {

mvc = MockMvcBuilders.webAppContextSetup(context).addFilter(springSecurityFilterChain).build();

}

@Test

@Transactional

public void Test1(){ //do stuff }

}

但这并不像我想的那样有效.看起来Spring尝试运行schema.sql的速度比我创建它快,并且失败了:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [application]

如果我只是关闭生成schema.sql的代码,并让Spring以已经创建的模式运行,那么一切都很好.但是,如果我删除schema.sql并让我的类生成它,则说明它将失败.

我试图在SpringJUnit4ClassRunner中重写run(RunNotifier notifier)方法,并将迁移合并放在其中,然后再调用super.run(notifier)方法,但这仍然行不通.

有没有一种方法可以在Spring获得它之前生成schema.sql?

附言

我不能将生产线用于生产环境.也许可以将其仅用于测试?

UPD:

经过一些实验后,我将其设置在test.yml中:

spring.jpa.hibernate.ddl-auto: none

现在,它加载上下文,执行一个仅获取Oauth2令牌的测试,而其他执行POST和GET请求的测试失败,因为它无法执行将附加数据放在测试方法之前的@sql批注.该数据库似乎未受影响,即没有任何表.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值