java - 每当检查连接时就会运行 schema.sql

标签 java mysql spring-boot schema mybatis

我遇到了一个奇怪的问题。 我的 springboot 应用程序中有一个 schema.sql 文件,它创建表(具有外键约束)并在应用程序运行时插入数据。但这里的问题是,当连接空闲时,然后对连接进行测试。现在,这给我带来了问题,因为再次执行 schema.sql 文件,并且您知道我的表包含外键约束,因此脚本失败,因为它不允许删除包含外键约束的表外键约束。

是因为我的application.properties吗?

这是我的application.properties

spring.datasource.url=jdbc:mysql://dummy_url
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialization-mode=always
mybatis.config-location=classpath:/config/mybatis-config.xml

有没有办法让 schema.sql 只执行一次(仅在应用程序运行时)? 我的示例 schema.sql 如下所示:

DROP TABLE IF EXISTS `t001_map_mst`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `t001_map_mst` (
  `MAP_ID` int NOT NULL AUTO_INCREMENT,
  `MAP_NAME` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`MAP_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Contains map info';
/*!40101 SET character_set_client = @saved_cs_client */;

最佳答案

因为您使用的是 spring.datasource.initialization-mode=always,所以此属性具有以下值:

ALWAYS Always initialize the data source.
EMBEDDED Only initialize an embedded data source.
NEVER Do not initialize the data source.
check official document

我提供了三种方法来解决这个问题 1.更改您的schema.sql,如果表存在则不要运行脚本 2. 第一次运行完成后,更改 application.properties,将其更改为 spring.datasource.initialization-mode=none
3.从代码初始化:检查Spring Boot - Loading Initial Data

关于java - 每当检查连接时就会运行 schema.sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61766949/

相关文章:

java - Spring Hibernate - NullPointerException SessionFactory

Java泛型为什么我不能实例化泛型类型

php - 从下拉列表提交中选择后,值无法插入到我的数据库中

java - spring boot - spring.xml 中定义的组件扫描 bean

java - 找不到 Spring Security/登录

java - 类似 Excel 的 JTable 单元格编辑器,在版本开始时有一个空单元格

java - 用户输入长文本并生成 PDF

php - 推进 2 : Using a subquery as the value for a virtual column

mysql - 根据多行条件选择 id

java - 无法 Autowiring 。找不到 'MessagingPropertiesRefactor' 类型的 bean