[BAEL-7421] - Creating Postgres Schema with Liquibase
This commit is contained in:
		
							parent
							
								
									4f0a8ce5d9
								
							
						
					
					
						commit
						028a0dbe9f
					
				| @ -4,13 +4,9 @@ | ||||
|     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>liquibase</artifactId> | ||||
|     <name>liquibase</name> | ||||
| 
 | ||||
|     <parent> | ||||
|     <groupId>com.baeldung</groupId> | ||||
|         <artifactId>persistence-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
|     <name>liquibase</name> | ||||
|     <version>0.0.1-SNAPSHOT</version> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
| @ -18,6 +14,38 @@ | ||||
|             <artifactId>mysql-connector-j</artifactId> | ||||
|             <version>${mysql-connector-java.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-web</artifactId> | ||||
|             <version>3.2.3</version> | ||||
|             <exclusions> | ||||
|                 <exclusion> | ||||
|                     <groupId>org.slf4j</groupId> | ||||
|                     <artifactId>slf4j-log4j12</artifactId> | ||||
|                 </exclusion> | ||||
|             </exclusions> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-data-jpa</artifactId> | ||||
|             <version>3.2.3</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.liquibase</groupId> | ||||
|             <artifactId>liquibase-core</artifactId> | ||||
|             <version>4.24.0</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.postgresql</groupId> | ||||
|             <artifactId>postgresql</artifactId> | ||||
|             <version>42.6.1</version> | ||||
|             <scope>runtime</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>net.lbruun.springboot</groupId> | ||||
|             <artifactId>preliquibase-spring-boot-starter</artifactId> | ||||
|             <version>1.5.0</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
| @ -32,12 +60,26 @@ | ||||
|                     <changeLogFile>liquibase/db-changelog.xml</changeLogFile> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <configuration> | ||||
|                     <release>${maven.compiler.release}</release> | ||||
|                     <compilerArgs>--enable-preview</compilerArgs> | ||||
|                     <source>${maven.compiler.source.version}</source> | ||||
|                     <target>${maven.compiler.target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <mysql-connector-java.version>8.2.0</mysql-connector-java.version> | ||||
|         <liquibase-maven-plugin.version>4.25.0</liquibase-maven-plugin.version> | ||||
|         <maven.compiler.source.version>17</maven.compiler.source.version> | ||||
|         <maven.compiler.target.version>17</maven.compiler.target.version> | ||||
|         <maven.compiler.release>17</maven.compiler.release> | ||||
|         <java.version>17</java.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,12 @@ | ||||
| package com.baeldung.liquibase; | ||||
| 
 | ||||
| import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
| 
 | ||||
| @SpringBootApplication | ||||
| public class LiquibaseCreateSchemaApplication { | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         SpringApplication.run(LiquibaseCreateSchemaApplication.class, args); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,31 @@ | ||||
| package com.baeldung.liquibase.configuration; | ||||
| 
 | ||||
| import org.springframework.beans.BeansException; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.beans.factory.config.BeanPostProcessor; | ||||
| 
 | ||||
| import javax.sql.DataSource; | ||||
| import java.sql.Connection; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| 
 | ||||
| public class SchemaInitializer implements BeanPostProcessor { | ||||
| 
 | ||||
|     @Value("${spring.liquibase.default-schema}") | ||||
|     private String schemaName; | ||||
| 
 | ||||
|     @Override | ||||
|     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { | ||||
|         if (bean instanceof DataSource) { | ||||
|             DataSource dataSource = (DataSource) bean; | ||||
|             try { | ||||
|                 Connection conn = dataSource.getConnection(); | ||||
|                 Statement statement = conn.createStatement(); | ||||
|                 statement.execute(String.format("CREATE SCHEMA IF NOT EXISTS %s", schemaName)); | ||||
|             } catch (SQLException e) { | ||||
|                 throw new RuntimeException(e); | ||||
|             } | ||||
|         } | ||||
|         return bean; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,30 @@ | ||||
| package com.baeldung.liquibase.entity; | ||||
| 
 | ||||
| import jakarta.persistence.Entity; | ||||
| import jakarta.persistence.Id; | ||||
| import jakarta.persistence.Table; | ||||
| 
 | ||||
| @Entity | ||||
| @Table(name = "users") | ||||
| public class User { | ||||
| 
 | ||||
|     @Id | ||||
|     private Long id; | ||||
|     private String name; | ||||
| 
 | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
| 
 | ||||
|     public void setId(Long id) { | ||||
|         this.id = id; | ||||
|     } | ||||
| 
 | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
| 
 | ||||
|     public void setName(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,5 @@ | ||||
| #spring.datasource.url=jdbc:postgresql://some-postgresql-host/some-postgresql-database | ||||
| #spring.datasource.username=your-postgresql-username | ||||
| #spring.datasource.password=your-postgresql-password | ||||
| #spring.liquibase.change-log=classpath:liquibase/changelog.xml | ||||
| #spring.liquibase.default-schema=user_management | ||||
| @ -0,0 +1,23 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <databaseChangeLog | ||||
|         xmlns="http://www.liquibase.org/xml/ns/dbchangelog" | ||||
|         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> | ||||
| 
 | ||||
|     <!--    <changeSet id="0" author="unknown">--> | ||||
|     <!--        <sql>--> | ||||
|     <!--            CREATE SCHEMA IF NOT EXISTS user_management;--> | ||||
|     <!--        </sql>--> | ||||
|     <!--    </changeSet>--> | ||||
|     <changeSet id="1" author="unknown"> | ||||
|         <!--        <createTable tableName="users" schemaName="user_management">--> | ||||
|         <createTable tableName="users"> | ||||
|             <column name="id" type="bigint"> | ||||
|                 <constraints primaryKey="true" nullable="false"/> | ||||
|             </column> | ||||
|             <column name="name" type="varchar(255)"> | ||||
|                 <constraints nullable="false"/> | ||||
|             </column> | ||||
|         </createTable> | ||||
|     </changeSet> | ||||
| </databaseChangeLog> | ||||
| @ -0,0 +1 @@ | ||||
| CREATE SCHEMA IF NOT EXISTS user_management; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user