Flowable使用docker中MySQL8,Springboot启动出错

目录

  • 问题复现
  • 原因分析
  • 解决办法
  • 修改MYSQL大小写敏感配置
  • 问题小结
  • docker的优点:

问题复现

        最近在将项目迁至docker环境时,出现启动时失败,报错信息如下:

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'processEngine': 
FactoryBean threw exception on object creation; 
nested exception is org.flowable.common.engine.api.FlowableWrongDbException: version mismatch:
 library version is '6.6.0.0', db version is null Hint: 
Set 

原因分析

        因为项目是在更换了docker中Mysql8的数据库时出错的,为了保持与原来数据库版本一致,我特意安装了Mysql8.0.11版本。导入原来sql脚本后,springboot项目启动依然出错。

        上网查了资料之后基本断定是因为Mysql数据库没有忽略大小写的原因导致的。通过sql语句查看mysql大小写敏感配置如下:

mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
2 rows in set (0.01 sec)
 

解决办法

修改MYSQL大小写敏感配置

  这里注意:

        docker中修改my.cnf 中的配置(lower-case-table-names=1)后,重启MYSQL

是无效的。

        docker只能后面在开始创建安装MYSQL容器时设置大小写敏感有效。直接加--lower-case-table-names=1是可以了。记录docker创建mysql容器的完整语句:

docker run --name mysql --restart=always \
    -p 3366:3306 \
    -e MYSQL_ROOT_PASSWORD="root" \
    -e TZ=Asia/Shanghai \
    -di mysql:8.0.11 --lower-case-table-names=1

         连接并查看新创建的mysql容器的配置,已经成功设置成1:

mysql> SHOW VARIABLES LIKE '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.07 sec)

问题小结

        修改了配置之后,项目可以正常启动。通过docker修改mysql配置的操作中,明显感觉到使用docker操作会很方便,但同时也会因为不熟悉带来一些小麻烦,但总体还是提高了开发效率。

docker的优点:

Docker有很多优点,包括:

1. 轻量级和可移植性:Docker容器是基于操作系统级虚拟化的,相对于传统的虚拟机,它更轻量级,并且可以在任何环境中移植和运行。

2. 快速部署和扩展:使用Docker可以快速创建、部署和启动容器,极大地减少了应用程序上线和扩展的时间和麻烦。

3. 环境一致性:在开发、测试和生产环境中使用相同的容器,可以确保应用程序在不同环境中的一致性,避免了由于环境差异导致的问题。

4. 资源利用率高:Docker容器可以共享操作系统内核,因此可以更有效地使用系统资源,提高资源利用率。

5. 简化依赖和配置管理:Docker可以将应用程序及其依赖打包在一个容器中,简化了依赖和配置管理的过程,减少了潜在的冲突和错误。

6. 更好的可移植性和可复用性:Docker容器可以轻松地在不同的主机和云平台之间迁移和复用,提高了应用程序的可移植性和可复用性。

7. 安全和隔离性:Docker提供了强大的安全和隔离机制,确保不同容器之间的应用程序和资源互相隔离,避免了潜在的安全风险。

总的来说,Docker可以帮助开发人员和运维人员更高效地管理和部署应用程序,提高开发和部署的速度和可靠性,并且更好地利用系统资源。

你可能感兴趣的:(springboot,软件环境,实战总结,spring,boot,docker,java)