While the Changelog Parser is used when parsing a changelog, commands like
diffChangelog need to create a changelog file.
Support for writing a changelog uses the liquibase.serializer.ChangeLogSerializer` interface.
ChangeLogSerializer has a
supports() method which determines if it can serialize to the given file.
To determine which supported
ChangeLogSerializer to use, Liquibase will find all the implementations that use the given name and choose the one with the highest priority.
This allows extensions to either define a new format OR override an existing serializer.
Changes are dynamically discovered, so must have a no-arg constructor and be registered in the
The method returns the various file extensions that correspond to this changelog format. Liquibase will choose the serializer to use based on the filename of the changelog the user is writing to.
Used in selecting the instance to use
This method is used to generate a new changelog file. It's passed a list of objects like ChangeSets, Preconditions, etc. and this method converts them to the changelog format and writes them to the output stream.
This is generally implemented by relying on the serialize() method to format object types.
Converts a particular object to the changelog's format. This should be used by the write() function, but it can be called by other parts of Liquibase.
The types of objects passed can include ChangeSets, Preconditions, Changes, and more.
Called during diffChangeLog to add a changeset to an existing file.
It is up to this method to open and manage the file stream, and should not impact the rest of the existing file. For example, the XML parser does not read the existing changelog into a DOM and append the new changeset into the DOM before re-serializing the entire DOM because that will lose any existing formatting the user wants such as spacing between particular elements, groupings of attributes, etc.
The complete javadocs for
liquibase.serializer.ChangeLogSerializer is available at https://javadocs.liquibase.com
The following guides provide relevant examples:
Created: February 2, 2023