簡體   English   中英

每當檢查連接時,schema.sql 就會運行

[英]schema.sql runs whenever the connection is checked

我面臨一個奇怪的問題。 我的 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 始終初始化數據源。
EMBEDDED 僅初始化嵌入式數據源。
NEVER 不要初始化數據源。
查看官方文檔

我提供了三種解決問題的方法 1. 更改您的 schema.sql,如果表存在則不要運行腳本 2. 完成第一次運行后更改您的 application.properties,將其更改為spring.datasource.initialization-mode=none
3. init from code:檢查Spring Boot - Loading Initial Data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM