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 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,如果 table 存在则不要 运行 脚本
2. 完成第一个 运行 后,将 application.properties 更改为 spring.datasource.initialization-mode=none
3. 从代码初始化:检查 Spring Boot - Loading Initial Data
我遇到了一个奇怪的问题。
我的 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,如果 table 存在则不要 运行 脚本
2. 完成第一个 运行 后,将 application.properties 更改为 spring.datasource.initialization-mode=none
3. 从代码初始化:检查 Spring Boot - Loading Initial Data