Конфигурация Liquibase Db2 - PullRequest
       57

Конфигурация Liquibase Db2

0 голосов
/ 01 августа 2020

Я пытаюсь получить Liquibase 3.10.2 на Ubuntu, впервые работающую со складом 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 вы используете?

Bundle-Name: IBM J CC JDB C 4 Driver

(4) Какой именно запрос работает в dbeaver, но не работает в ликвибазе?

На данный момент нет, просто пытаюсь установить соединение. У меня есть рабочее соединение в Dbeaver, использующее тот же драйвер jdb c, то же имя класса, тот же сервер, базу данных, имя пользователя, пароль и шаблон URL.

Я бы действительно был счастлив получить SQL ошибок!

1 Ответ

1 голос
/ 03 августа 2020

Liquibase 3.10.2, похоже, работает у меня с Db2-LUW.

Попробуйте внести эти изменения, которые задокументированы в текстовом файле GETTING_STARTED.txt.

Либо переместите банку Db2 файлы в подкаталог lib Liquibase или внесите изменения в CLASSPATH, используемый Liquibase. Для Db2-LUW это файлы: lib/db2jcc4.jar , lib/db2jcc.jar , lib/db2jcc_license_cu.jar. В вашем вопросе показано, что вы скопировали эти файлы в каталог liquibase, а не в подкаталог libase lib.

Db2-LUW отклонит синтаксис в примере changeLogFile для H2, поскольку Db2-LUW требует, чтобы столбец первичного ключа не был нулевым . В файле примера вы можете изменить id int primary key на id int not null primary key для всех таблиц, чтобы избежать SQLCODE -542.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...