? ? ? ? 最近在将项目迁至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 <property name="databaseSchemaUpdate" to value="true" or value="create-drop" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for automatic schema creation....
? ? ? ? 因为项目是在更换了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)
? 这里注意:
????????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有很多优点,包括:
1. 轻量级和可移植性:Docker容器是基于操作系统级虚拟化的,相对于传统的虚拟机,它更轻量级,并且可以在任何环境中移植和运行。
2. 快速部署和扩展:使用Docker可以快速创建、部署和启动容器,极大地减少了应用程序上线和扩展的时间和麻烦。
3. 环境一致性:在开发、测试和生产环境中使用相同的容器,可以确保应用程序在不同环境中的一致性,避免了由于环境差异导致的问题。
4. 资源利用率高:Docker容器可以共享操作系统内核,因此可以更有效地使用系统资源,提高资源利用率。
5. 简化依赖和配置管理:Docker可以将应用程序及其依赖打包在一个容器中,简化了依赖和配置管理的过程,减少了潜在的冲突和错误。
6. 更好的可移植性和可复用性:Docker容器可以轻松地在不同的主机和云平台之间迁移和复用,提高了应用程序的可移植性和可复用性。
7. 安全和隔离性:Docker提供了强大的安全和隔离机制,确保不同容器之间的应用程序和资源互相隔离,避免了潜在的安全风险。
总的来说,Docker可以帮助开发人员和运维人员更高效地管理和部署应用程序,提高开发和部署的速度和可靠性,并且更好地利用系统资源。