Solidbase

Generic migration tool for RDBMS and other resources based on Liquibase
Alternatives To Solidbase
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Migrate11,589594a day ago129March 17, 2022273otherGo
Database migrations. CLI and Golang library.
Flyway7,2034,0444422 days ago156September 08, 2022118apache-2.0Java
Flyway by Redgate • Database Migrations Made Easy.
Pgloader4,469
a month ago1February 27, 2018295otherCommon Lisp
Migrate to PostgreSQL in a single command!
Phinx4,3763,4944378 days ago82January 21, 2022137mitPHP
PHP Database Migrations for Everyone
Goose3,95465996 days ago46August 29, 202257otherGo
A database migration tool. Supports SQL migrations and Go functions.
Dbmate3,43219 days ago27March 25, 202216mitGo
:rocket: A lightweight, framework-agnostic database migration tool.
Fluentmigrator2,9555481304 days ago52January 14, 2022221apache-2.0C#
Fluent migrations framework for .NET
Express Typescript Boilerplate2,946
a month ago94mitTypeScript
A delightful way to building a RESTful API with NodeJs & TypeScript by @w3tecch
Nyaa2,861
2 years ago61gpl-3.0Python
Bittorrent software for cats
Simplebank2,59412 months ago6April 11, 20214mitGo
Backend master class: build a simple bank service in Go
Alternatives To Solidbase
Select To Compare


Alternative Project Comparisons
Readme

Solidbase build Maven Central License

Generic migration tool for RDBMS and other resources based on Liquibase.

  • Multi-database (based on Liquibase)
  • Multi-resource (not only RDBMS)
  • Multi-module (modules can have their own versions)

Usage

Add dependency

Add following dependency into your Maven pom.xml:

<dependencies>
  <dependency>
    <groupId>io.github.gitbucket</groupId>
    <artifactId>solidbase</artifactId>
    <version>1.0.5</version>
  </dependency>
</dependencies>

or for Gradle add to build.gradle:

implementation 'io.github.gitbucket:solidbase:1.0.5'

Define migration

Create the Liquibase migration xml files under src/main/resources. For example:

  • src/main/resources/test_1.0.0.xml

    <changeSet>
      <createTable tableName="person">
          <column name="id" type="int" autoIncrement="true" primaryKey="true" nullable="false"/>
          <column name="firstname" type="varchar(50)"/>
          <column name="lastname" type="varchar(50)" constraints nullable="false"/>
          <column name="state" type="char(2)"/>
      </createTable>
    </changeSet>
    

Define migration that migrates RDBMS using these XML files:

import io.github.gitbucket.solidbase.migration.LiquibaseMigration;
import io.github.gitbucket.solidbase.model.Module;
import io.github.gitbucket.solidbase.model.Version;

Module module = new Module(
  // module id
  "test",
  // versions (oldest first)
  new Version("1.0.0", new LiquibaseMigration("test_1.0.0.xml")),
  new Version("1.0.1", new LiquibaseMigration("test_1.0.1.xml")),
  ...
);

You can also add a migration for resources other than RDBMS by implementing Migration interface. Added migrations are executed in order.

import io.github.gitbucket.solidbase.migration.LiquibaseMigration;
import io.github.gitbucket.solidbase.migration.Migration;

new Version("1.0.0",
  // At first, migrate RDBMS
  new LiquibaseMigration("test_1.0.0.xml"),
  // Second, migrate other resources
  new Migration(){
    @Override
    public void migrate(String moduleId, String version, Map<String, Object> context) throws Exception {
      ...
    }
  }
);

Run

Then, run migration as below:

import io.github.gitbucket.solidbase.SolidBase;
import java.sql.DriverManager;
import liquibase.database.core.H2Database;

Solidbase solidbase = new Solidbase();

solidbase.migrate(
  DriverManager.getConnection("jdbc:h2:mem:test", "sa", "sa"),
  Thread.currentThread().getContextClassLoader(),
  new H2Database(),
  module
);

Differences between the current version and the latest version are applied.

Background

Solidbase creates a following VERSIONS table to manage versions automatically:

Column name Data type Not Null
MODULE_ID (PK) VARCHAR(100) Yes
VERSION VARCHAR(100) Yes

Solidbase uses this table to know the current version. When migration of the new version is successful, it updates the version with the new version.

Migration

XML migration

LiquibaseMigration migrates the database by Liquibase like XML as above.

XML schema is improved from Liquibase to be possible to declare column information as attributes instead of nested elements. And a default variable ${currentDateTime} is available in the XML:

<insert tableName="person">
  <column name="firstname" value="root"/>
  <column name="lastname" value="root"/>
  <column name="registeredDate" valueDate="${currentDateTime}"/>
</insert>

SQL migration

SqlMigration migrates the database by native SQL.

Apply RDBMS specific configuration

In the default, LiquibaseMigration and SqlMigration try to load a file from classpath as following order:

  1. Specified path with _${database} name suffix (if specified)
  2. Specified path (if specified)
  3. ${moduleId}_${version}_${database}.${extension}
  4. ${moduleId}_${version}.${extension}

It's possible to apply different XML/SQL for each databases by creating multiple files such as gitbucket_1.0.0_h2.sql (for H2 database) and gitbucket_1.0.0_mysql.sql (for MySQL).

for Developers

To release arifacts, run the following command:

$ mvn deploy -DperformRelease=true -DskipTests
Popular Migration Projects
Popular Database Projects
Popular Data Processing Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Java
Database
Sql
Xml
Migration
Relational Databases