我正在使用terraform创建RDS aurora-mysql。我使用SpringBoot连接到它。我的问题是创建表格。我以为terraform会创建表,但看起来SpringBoot连接到数据库并使用liquibase来创建表。这是正确的吗。我希望在通过调用liquibase的地形创建数据库时创建表,但找不到任何详细说明如何做到这一点的文档,
数据库表应该由liquibase脚本创建。为了确保这一点,您需要通过在应用程序配置中提供数据库连接详细信息,用spring引导应用程序配置likibase。这意味着,在执行liquibase之前,必须已经创建了数据库(手动或通过流程自动创建(。然后,您还可以在自动化流程或管道中触发liquibase执行(通过mvn-liquibase:更新或运行应用程序(。
一个典型的带有弹簧靴的liquibase配置可能看起来像这样:
application.yaml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/db1
username: test
password: test
liquibase:
enabled: true
change-log: classpath:changelog.xml
changelog.xml:
<?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.8.xsd">
<include file="change-sets/create-table1.xml"/>
</databaseChangeLog>
更改集/create-table1.xml:
<?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.8.xsd">
<changeSet id="create-table1-ddl" author="bmfirat">
<createTable tableName="table1">
<column name="id" type="BIGINT" autoIncrement="true" >
<constraints primaryKey="true" nullable="false" primaryKeyName="pk_table1"/>
</column>
<column name="title" type="varchar(255)">
<constraints nullable="false" unique="false"/>
</column>
<column name="description" type="varchar(255)">
<constraints nullable="false" unique="false"/>
</column>
</createTable>
<rollback>
<dropTable tableName="table1"/>
</rollback>
</changeSet>
</databaseChangeLog>
否,terraform不会为您创建数据库表。它怎么知道该怎么处理模式之类的东西呢?也许你可以成为当地的高管,但这看起来确实很合适。您可以创建一个提供程序来与数据库接口。我认为您想要的是让terraform创建数据库,然后让您的应用程序管理表。
Liquibase确保Liquibase所做的更改在下一次运行中也是一致的。它在运行时使用两个表:DATABASECHANGELOGLOCK DATABASECHANGELOG,其中xxxLOCK用于在运行脚本时锁定数据库,DATABASECHAngeELOG用于跟踪对数据库所做的更改。它可以是添加表、更新列、插入数据等。
因此,所有这些都将在SpringBoot应用程序启动时运行。你需要一些其他机制来做你期望的事情。