[英]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.