引入pom依赖,需要引入 flyway-mysql
如果没有引入 flyway-mysql
,会抛出异常 flyway : Unsupported Database: MySQL 5.5
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<!-- flyway : Unsupported Database: MySQL 8.0 -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
</dependency>
spring.datasource.url 配置
注意,首次启动时,不要设置数据库,如果设置了数据库,会抛出异常 Caused by: java.sql.SQLSyntaxErrorException: Unknown database 'd_plugbase_system'
,之所以会抛出数据库不存在的异常,是因为 flyway 会调用 sql connection,sql connection 中数据库不存在,所以就报错了。
启动完毕后,修改配置文件,将数据库名称加上即可。
还可以用一个更简单的方法,就是在 jdbc url 后加上参数 &createDatabaseIfNotExist=true
,目前 mysql 驱动是支持的
综上,如果数据库驱动支持,建议用数据库驱动创建数据库,如果不支持,就用 flyway 来创建,重启两次
spring.datasource.url=jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
spring.flyway.create-schemas=true
spring.flyway.schemas=d_plugbase_system
启动工程
启动工程,会自动创建 d_plugbase_system
,并完成 sql 初始化
修改 spring.datasource.url 配置
数据库创建成功后,需要修改 spring.datasource.url,将数据库连接完整设置
spring.datasource.url=jdbc:mysql://localhost:3306/d_plugbase_system?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
注意事项
上面步骤中的方法,最终是执行 jdbcTemplate.execute("CREATE SCHEMA " + database.quote(name));
来创建数据库,未指定数据库的字符集和排序规则,建议是修改数据库的 my.ini
,这样能保证数据库的字符集是 utf8mb4
,参考用例如下
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
datadir=D:/mnt/data/infra/mariadb/mariadb-10.11.1-winx64/data
[client]
default-character-set=utf8mb4
plugin-dir=D:\mnt\data\infra\mariadb\mariadb-10.11.1-winx64/lib/plugin
[mysql]
default-character-set=utf8mb4