当前位置: 首页 > 知识库问答 >
问题:

Liquibase Db2配置

梁兴文
2023-03-14

我正试图让ubuntu上的liquibase 3.10.2首次在Db2仓库中运行。在教程示例之后,H2“liquibase update”示例运行良好。

使用指定的jar和下面的url字符串,可以很好地使用dbeaver,但将其转换为liquibase会提供以下错误。

driver: com.ibm.db2.jcc.DB2Driver 
#jars in /test1/sql
classpath: db2jcc4.jar:db2jcc_license_cu.jar
databaseClass: com.ibm.db2.jcc.DB2Driver

# Enter the path for your changelog file.
changeLogFile: samplechangelog.h2.sql

#### Enter the Target database 'url' information  ####
url: jdbc:db2://192.168.72.143:50000/bludb

# Enter the username for your Target database.
username: bluadmin

# Enter the password for your Target database.
password: bluadmin

#### Enter the Source Database 'referenceUrl' information ####
## The source database is the baseline or reference against which your target database is compared for diff/diffchangelog commands.

# Enter URL for the source database
referenceUrl: jdbc:db2://192.168.72.143:50000/bludb

# Enter the username for your source database
referenceUsername: bluadmin

# Enter the password for your source database
referencePassword: bluadmin


09:23:16.261 ERROR [liquibase.integration.commandline.Main]: Unexpected error running Liquibase: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:125)
    at liquibase.integration.commandline.Main.doMigration(Main.java:1341)
    at liquibase.integration.commandline.Main.run(Main.java:303)
    at liquibase.integration.commandline.Main.main(Main.java:159)
Caused by: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
    at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:259)
    at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:149)
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:90)
    ... 3 common frames omitted
Caused by: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
    at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:187)
    ... 5 common frames omitted

更新的附加信息:

(1)导致显示错误的完整命令行是什么?我正在发布h2教程中引用的简单示例

jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ ls -al
total 6424
drwxrwxr-x 2 jarrod jarrod    4096 Aug  1 08:50 .
drwxrwxr-x 4 jarrod jarrod    4096 Aug  1 08:50 ..
-rw-r--r-- 1 jarrod jarrod     218 Jul 14 05:49 blankchangelog.h2.sql
-r--r--r-- 1 jarrod jarrod 6550443 Jun 11  2019 db2jcc4.jar
-r--r--r-- 1 jarrod jarrod    1529 Jun 11  2019 db2jcc_license_cu.jar
-rw-r--r-- 1 jarrod jarrod    2678 Aug  1 09:23 liquibase.properties
-rw-r--r-- 1 jarrod jarrod     456 Jul 14 05:49 samplechangelog.h2.sql
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ liquibase update 
15:05:37.848 DEBUG [liquibase.resource.ClassLoaderResourceAccessor]: Opening jar:file:/home/jarrod/liquibase3.10.2/liquibase.jar!/liquibase.build.properties as liquibase.build.properties
15:05:37.868 INFO  [liquibase.integration.commandline.Main]: ####################################################
##   _     _             _ _                      ##
....

(2)更改日志文件内容是什么这与示例h2更改日志相同;没有变化。

jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ cat samplechangelog.h2.sql 
--liquibase formatted sql

--changeset your.name:1
create table person (
    id int primary key,
    name varchar(50) not null,
    address1 varchar(50),
    address2 varchar(50),
    city varchar(30)
)

--changeset your.name:2
create table company (
    id int primary key,
    name varchar(50) not null,
    address1 varchar(50),
    address2 varchar(50),
    city varchar(30)
)

--changeset other.dev:3
alter table person add column country varchar(2)

jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ 

(3) 您使用的是哪个Db2驱动程序版本?

IBMJCC JDBC 4驱动程序

(4) 什么精确查询在dbeaver中有效,但在liquibase中失败?

目前没有,只是想让连接正常工作。我在Dbeaver中使用相同的jdbc驱动程序、相同的类名、相同的服务器、数据库、用户名、密码和URL模板建立了一个工作连接。

我真的很高兴看到SQL错误!

共有1个答案

羊刚捷
2023-03-14

Liquibase 3.10.2似乎适用于Db2-LUW。

尝试进行这些更改,这些更改记录在文本文件GETTING_STARTED. txt中。

将Db2 jar文件移动到liquibase的lib子目录中,或者安排更改liquibase使用的CLASSPATH。对于Db2-LUW,文件是:lib/db2jcc4.jar、lib/db2jcc.jar、lib/db2jcc_license_cu.jar。您的问题显示您将这些文件复制到liquibase目录而不是liquibase lib子目录中。

Db2 LUW将拒绝H2的示例changeLogFile中的语法,因为Db2 LUW要求主键列不为null。在示例文件中,可以将所有表的id int主键更改为id int not null主键,以避免出现SQLCODE-542。

 类似资料:
  • exVim 的配色由三部分组成: 你自己的Vim配色, exVim 插件的语法高亮和插件的配色. 你可以按照以下步骤来定制你的配色: 安装你的配色 exVim 提供了三种方法安装你的自定义配色 方法1. 在 ex-colorscheme 中安装(推荐) 首选的方法是在 ex-colorschemes 中安装自己的配色, 这种方法仅仅需要你把自己的配色文件放到 vimfiles/bundle/ex-

  • 目录: 在配置项目yml文件中: 问题: null 客户端YML: 有没有人知道我怎样才能在这两种情况下只带一个配置文件?

  • 丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!

  • Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。 在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,这全是因为有了 codec 设置。 所以,这里需要纠正之前的一个概念。Logstash 不只是一个input | filter | outpu

  • 在 “Hello World” 示例中,我们已经见到并介绍了 logstash 的运行流程和配置的基础语法。从这章开始,我们就要逐一介绍 logstash 流程中比较常用的一些插件,并在介绍中针对其主要适用的场景,推荐的配置,作一些说明。 限于篇幅,接下来内容中,配置示例不一定能贴完整。请记住一个原则:Logstash 配置一定要有一个 input 和一个 output。在演示过程中,如果没有写明

  • 根据文档--不管应用程序名称如何,如果模式与*/development(即localhost:8888/user/development或localhost:8888/demo/development)匹配,配置服务器应该匹配配置文件模式并获取适当的属性。例如:http://localhost:8888/demo/development我应该从ssh://git@xxxgithub.com/dev