springboot集成flywaysql脚本不执行 踩坑记录(非常经典)

废话不多说,看门见山,springboot集成flyway 写的sql脚本不执行,除了文章中说的常规问题(数据库链接、密码不对及sql脚本命名不规范问题)之外,要看下自己的项目又没有引进mybatis.

公司开发用的flyway,自己想在本地搭建一下试试。于是网上百度教程,一步一步走,

最后发现启动项目脚本没执行,数据库中是空的没有一个表 。

于是自己排查下,

  1. 数据库链接地址、用户名、密码 写对着没。

  1. 执行的脚本语法,及命名有没有什么问题,中间的下划线是两个'_'等等。

  1. 怀疑自己用的数据库(postgresql)是不是版本不对,是不是要换成mysql。

排查了下,都没什么太大问题。于是怀疑是不是项目没有整合mybatis.

自己引入了mybatis-plus的包,一启动项目,我去 😳还真是这个原因。网上有的教程有点坑啊😡,这么关键的地方不说。可能是flyway底层有做什么处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
集成Kettle到Spring Boot项目中可以使用Kettle的API,具体操作如下: 1. 引入Kettle依赖 ``` <dependency> <groupId>org.pentaho.kettle</groupId> <artifactId>kettle-core</artifactId> <version>8.3.0.0-371</version> </dependency> ``` 2. 编写执行Kettle脚本的代码 ``` import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.KettleLogStore; import org.pentaho.di.core.logging.LogLevel; import org.pentaho.di.core.logging.LoggingBuffer; import org.pentaho.di.job.Job; import org.pentaho.di.job.JobMeta; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import java.io.File; public class KettleExecutor { /** * 执行ktr文件 * * @param ktrPath 文件路径 * @return 执行结果 */ public static String executeKtr(String ktrPath) { try { // 初始化Kettle环境 KettleEnvironment.init(); // 创建ktr元数据对象 TransMeta transMeta = new TransMeta(ktrPath); // 创建ktr执行引擎 Trans trans = new Trans(transMeta); // 执行ktr文件 trans.execute(null); // 等待执行结束 trans.waitUntilFinished(); // 获取执行结果 if (trans.getErrors() == 0) { return "执行成功"; } else { return "执行失败"; } } catch (KettleException e) { e.printStackTrace(); return "执行异常"; } } /** * 执行kjb文件 * * @param kjbPath 文件路径 * @return 执行结果 */ public static String executeKjb(String kjbPath) { try { // 初始化Kettle环境 KettleEnvironment.init(); // 创建kjb元数据对象 JobMeta jobMeta = new JobMeta(kjbPath, null); // 创建kjb执行引擎 Job job = new Job(null, jobMeta); // 执行kjb文件 job.start(); // 等待执行结束 job.waitUntilFinished(); // 获取执行结果 if (job.getErrors() == 0) { return "执行成功"; } else { return "执行失败"; } } catch (KettleException e) { e.printStackTrace(); return "执行异常"; } } /** * 执行ktr文件,并将执行记录保存到数据库中 * * @param ktrPath 文件路径 * @param executeCountTable 执行计数表名 * @return 执行结果 */ public static String executeKtrAndRecordCount(String ktrPath, String executeCountTable) { try { // 初始化Kettle环境 KettleEnvironment.init(); // 创建ktr元数据对象 TransMeta transMeta = new TransMeta(ktrPath); // 创建ktr执行引擎 Trans trans = new Trans(transMeta); // 记录执行次数 int executeCount = getExecuteCount(executeCountTable); executeCount++; recordExecuteCount(executeCountTable, executeCount); // 执行ktr文件 trans.execute(null); // 等待执行结束 trans.waitUntilFinished(); // 获取执行结果 if (trans.getErrors() == 0) { return "执行成功"; } else { return "执行失败"; } } catch (KettleException e) { e.printStackTrace(); return "执行异常"; } } /** * 获取执行次数 * * @param executeCountTable 执行计数表名 * @return 执行次数 */ private static int getExecuteCount(String executeCountTable) { // TODO: 查询执行计数表,获取执行次数 return 0; } /** * 记录执行次数 * * @param executeCountTable 执行计数表名 * @param executeCount 执行次数 */ private static void recordExecuteCount(String executeCountTable, int executeCount) { // TODO: 向执行计数表中插入执行次数记录 } } ``` 3. 在Spring Boot项目中使用Kettle执行脚本 ``` @RestController public class KettleController { @GetMapping("/executeKtr") public String executeKtr() { String ktrPath = "kettle/test.ktr"; return KettleExecutor.executeKtr(ktrPath); } @GetMapping("/executeKjb") public String executeKjb() { String kjbPath = "kettle/test.kjb"; return KettleExecutor.executeKjb(kjbPath); } @GetMapping("/executeKtrAndRecordCount") public String executeKtrAndRecordCount() { String ktrPath = "kettle/test.ktr"; String executeCountTable = "execute_count"; return KettleExecutor.executeKtrAndRecordCount(ktrPath, executeCountTable); } } ``` 其中,`executeKtrAndRecordCount`方法实现了记录Kettle执行次数的功能,具体实现需要根据数据库类型和表结构进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值