;quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置文件
- 本次实战会用到Hibernate自动重新建表的功能,此功能会先删除库中已存在的同名表,因此,只有一个profile配置的时候,不要让此应用连接到生产环境
- 最安全的做法是使用profile功能将生产环境和测试环境的配置文件分开,测试环境的配置文件中,是测试数据库,并且开启了自动重新建表的的功能,而生产环境的配置文件中,自动重新建表的功能是关闭的
- 先来看公共配置文件application.properties,此文件和profile无关,应用一定会加载,里面是各个profile都会用到的公共配置,例如数据库类型
quarkus.datasource.db-kind=postgresql
quarkus.hibernate-orm.log.sql=true
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2
- 再看application-test.properties,这是当profile等于test时才会用到的配置文件,有两处要注意的地方稍后会提到
quarkus.datasource.username=quarkus
quarkus.datasource.password=123456
quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.50.43:15432/quarkus_test
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.sql-load-script=import.sql
- quarkus.hibernate-orm.database.generation:有六个取值,如下表
取值 |
含义 |
none |
啥也不做 |
create |
第一次启动会建表,之后启动不会再改动 |
drop-and-create |
每一次启动应用的时候都删表(数据也没了),然后建表,再执行import.sql导入数据 |
drop |
启动应用的时候删表,不删库 |
update |
保留数据,升级表结构 |
validate |
检查表结构与entity是否匹配 |
- 从上表可以看出,drop-and-create这个配置很适合开发和测试阶段,因为每次都会整理好数据,让测试和验证不受历史数据的影响
- 由于drop-and-create和update会改动数据库,因此不适合生产环境使用,这一点要牢记,官方也给出了警告
- quarkus.hibernate-orm.sql-load-script:指定sql文件,在配置项quarkus.hibernate-orm.database.generation等于drop-and-create的时候,就执行此sql文件,可以用来生成初始化数据
- 配置完成了,接下来开始写代码,从最核心的实体类开始
SQL文件
- 刚才的配置文件中配合的import.sql,其放置位置与applicatin.properites文件相同,内容如下,可见是往known_fruits表写入了三条记录
INSERT INTO known_fruits(id, name) VALUES (1, 'Cherry');
INSERT INTO known_fruits(id, name) VALUES (2, 'Apple');
INSERT INTO known_fruits(id, name) VALUES (3, 'Banana');
- 从前面的配置可知,profile等于test的时候,应用启动的时候,会根据实体类的信息执行删表和建表的操作,然后执行import.sql导入三条记录
编码:实体类
- 熟悉hibernate的读者都知道,实体类并非只有get和set方法的Pojo,它包含了大量