рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ
рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрддрд╛
рд▓рдЧрд╛рдпрд╛ рдФрд░
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрд╛, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреВрд░рд╛ рдмреЗрд╕ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЛрдб
рдпрд╣рд╛рдБ GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо
рд▓рд┐рдмрд╛рд╕-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧрдЗрди рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдпрд╣ рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрддреА рд╣реИред рдЖрдЗрдП
рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐
рдИрдореЗрд▓ рд╢реВрдиреНрдп рди рд╣реЛред рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдб рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рд╕рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдВ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдПрдЧреАред рдЗрд╕рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рджреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ JPA рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рдпрд╣реА рдЕрдм рд╣рдо рдХрд░реЗрдВрдЧреЗ!
рд▓рд┐рдмрд╛рд╕-рдбрд┐рдлрд░реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ
Pom.xml рдлрд╝рд╛рдЗрд▓ рдХреЗ
рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ,
рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЬрдЯрд┐рд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣
рд▓рд┐рдмрд╛рд╕-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧрдЗрди рд╣реИ , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдпрдордиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рдкреНрд▓рдЧрдЗрди рд╣рдореЗрдВ рджреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ (
liquibase-hibernate5 рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛
рдЬрд╛рддрд╛ рд╣реИ ) рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ
рд╢рд░рд╛рдм рдмрдирд╛рдиреЗ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>3.8.1</version> <configuration> <propertyFile>${project.build.outputDirectory}/liquibase-maven-plugin.properties</propertyFile> <systemProperties> <user.name>your_liquibase_username</user.name> </systemProperties> <logging>info</logging> </configuration> <dependencies> <dependency> <groupId>org.liquibase.ext</groupId> <artifactId>liquibase-hibernate5</artifactId> <version>3.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.2.0.RELEASE</version> </dependency> </dependencies> </plugin>
User.name рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдХрдмрд┐рдЬрд╝ рдмрдирд╛рдИ рдЧрдИ рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдУрдПрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдкреНрд▓рдЧрдЗрди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реАрдзреЗ pom.xml рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдорд╛рд╡реЗрди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЕрд▓рдЧ
рд▓рд┐рдмрд╛рд╕- maven-plugin.properties рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред
changeLogFile= @project.basedir@/src/main/resources/db/changelog/db.changelog-master.yaml url= jdbc:mysql://localhost:3306/geek_db?createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username= dbusername password= dbpassword driver= com.mysql.cj.jdbc.Driver referenceUrl= hibernate:spring:ru.usharik.liquibase.demo.persist.model?dialect=org.hibernate.dialect.MySQLDialect diffChangeLogFile= @project.basedir@/src/main/resources/db/changelog/db.changelog-@timestamp@.yaml ignoreClasspathPrefix= true
рдпрд╣
url рдФрд░
ReferenceUrl рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рдмрд╛рдж рд▓рд┐рдмрд╛рд╕ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реЗрдлрд░реЗрдВрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдзрд╛рд░ рдФрд░
рдпреВрдЖрд░рдПрд▓ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ
url рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдзрд╛рд░ рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрджрд░реНрдн-рд▓рд┐рдВрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рд░реЗрдлрд░реЗрдВрд╕ рд▓рд┐рдВрдХ рдкрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рд╣рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХреЛрдб рдореЗрдВ рдХрд┐рдП рдЧрдП рдереЗред
рдЕрдм рд╣рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╡реЗрди-рд╕рдВрд╕рд╛рдзрди-рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
@project.basedir@
рдФрд░
@timestamp@
ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреНрд░рдкрддреНрд░ рдХреЗ
рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрднрд╛рдЧ рдХреЛ
рдмрд┐рд▓реНрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.*</include> </includes> </resource> </resources>
рд╡реИрд╕реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ
${smth}
рд╕реЗ
@smth@
рддрдХ
maven-resource-plugin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЙрдкреБрд▓реЗрдЯреЗрдб рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ
@smth@
рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ
рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ
рдирд┐рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
pom.xml рдореЗрдВ
рдЧреБрдгреЛрдВ рдХреЗ рдЦрдВрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдХрд╛рд╢, рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреБрдЫ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╡рд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
<properties> <java.version>1.8</java.version> <timestamp>${maven.build.timestamp}</timestamp> <maven.build.timestamp.format>yyyyMMdd-HHmmssSSS</maven.build.timestamp.format> </properties>
рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдИрдореЗрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ
@Column(name = "email", nullable = false) private String email;
рдЕрдВрдд рдореЗрдВ, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП
рд▓рд┐рдмрд╛рд╕-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВред
mvn clean install liquibase:diff -DskipTests=true
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдЧрдЗрди (рд▓рд┐рдмрд╛рд╕: рднрд┐рдиреНрди) рд╕рдВрдХрд▓рд┐рдд рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП
рд▓рдХреНрд╖реНрдп рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЗрдХрд╛рдИ рд╢реНрд░реЗрдгреА рдХреА рдлрд╛рдЗрд▓реЗрдВред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
рд╕рдВрд╕рд╛рдзрдиреЛрдВ / рдбреАрдмреА / рдЪреЗрдВрдЧрд▓реЙрдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ
db.changelog-20190723-100748666.yaml рдирд╛рдо рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ
рджреЗрдЧреА ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА, рдЬреЛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдХреЗ рдЕрдиреБрд░реВрдк рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
databaseChangeLog: - changeSet: id: 1563876485764-1 author: your_liquibase_username (generated) changes: - addNotNullConstraint: columnDataType: varchar(255) columnName: email tableName: users
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓рдХреБрд▓ рд╡рд╣реА рдмрджрд▓рд╛рд╡ рдХрд░рддреА рд╣реИ рдЬреЛ рдХреЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЦрд╛рд▓реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪрд▓рд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╕ рдЗрд╕ рдлрд╛рдЗрд▓ рд╕реЗ
рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ
рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
db.changelog-master.yaml рдкрд░ рдпрд╛ рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
- include: file: db.changelog-20190723-100748666.yaml relativeToChangelogFile: true
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреЛ
logicalFilePath: db/changelog/db.changelog-20190723-100748666.yaml
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
logicalFilePath: db/changelog/db.changelog-20190723-100748666.yaml
,
logicalFilePath: db/changelog/db.changelog-20190723-100748666.yaml
рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдПрд▓реНрдХреЛрд╣рд▓ рдмреАрди рдФрд░
рд▓рд┐рдмрд╛рд╕-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдВрднрд╡ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдпрд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
mvn liquibase:update
рдЖрдЗрдП рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рднреВрдорд┐рдХрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрдИ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз рд╣реЛрдВрдЧреЗред
@Entity @Table(name = "roles") public class Role implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name", unique = true, nullable = false) private String name; @ManyToMany(mappedBy = "roles") private Set<User> users;
рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
@ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) private Set<Role> roles;
рддреБрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ
databaseChangeLog: - changeSet: id: 1563877765929-1 author: your_liquibase_username (generated) changes: - createTable: columns: - column: autoIncrement: true constraints: primaryKey: true primaryKeyName: rolesPK name: id type: BIGINT - column: constraints: nullable: false name: name type: VARCHAR(255) tableName: roles - changeSet: id: 1563877765929-2 author: your_liquibase_username (generated) changes: - createTable: columns: - column: constraints: nullable: false name: user_id type: BIGINT - column: constraints: nullable: false name: role_id type: BIGINT tableName: users_roles - changeSet: id: 1563877765929-3 author: your_liquibase_username (generated) changes: - addPrimaryKey: columnNames: user_id, role_id tableName: users_roles - changeSet: id: 1563877765929-4 author: your_liquibase_username (generated) changes: - addUniqueConstraint: columnNames: name constraintName: UC_ROLESNAME_COL tableName: roles - changeSet: id: 1563877765929-5 author: your_liquibase_username (generated) changes: - addForeignKeyConstraint: baseColumnNames: user_id baseTableName: users_roles constraintName: FK2o0jvgh89lemvvo17cbqvdxaa deferrable: false initiallyDeferred: false referencedColumnNames: id referencedTableName: users - changeSet: id: 1563877765929-6 author: your_liquibase_username (generated) changes: - addForeignKeyConstraint: baseColumnNames: role_id baseTableName: users_roles constraintName: FKj6m8fwv7oqv74fcehir1a9ffy deferrable: false initiallyDeferred: false referencedColumnNames: id referencedTableName: roles
рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдХрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд░реЛрд▓ рдмреИрдХ рдкрд░рд┐рд╡рд░реНрддрди
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХреИрд╕реЗ рд░реЛрд▓ рдХрд░реЗрдВред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЙрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╕реЗрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдПрдХ рд░реЛрд▓рдмреИрдХ рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
- рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реЗ рдЧрд┐рдирддрд╛ рд╣реИ
- рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддрд╛рд░реАрдЦ рдХреЗ рдмрд╛рдж
- рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реЗрдЯ)
рдЯреИрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рд╣реИред
- changeSet: id: some_uniqui_id author: liquibase_user_name changes: - tagDatabase: tag: db_tag
рдЦреИрд░, рд░реЛрд▓рдмреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╕реВрдЪреАрдмрджреНрдз рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢
mvn liquibase:rollback -Dliquibase.rollbackTag=db_tag mvn liquibase:rollback -Dliquibase.rollbackCount=1 mvn liquibase:rollback "-Dliquibase.rollbackDate=Jun 03, 2017"
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА
- рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб
- рд▓рд┐рд▓реАрдмреЗрд╕ рдореЗрдВ рд░реЛрд▓рдмреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
- Liquibase рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд╛рд╕рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
- рдЧрд┐рддреВрдм рдкрд░ рд▓рд┐рдмрд╛рд╕
- рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА, рдкрд░рд┐рд╡рд░реНрдзрди, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ред