springboot服务如何执行sql脚本文件

当sql脚本文件包含不同数据库实例sql时,遍历读取sql文件再插入时,由于是不同的数据库实例这种方式就不行了,这时就需要程序直接执行sql脚本。

springboot执行sql脚本

/*** 执行sql脚本* @throws SQLException*/
private void executeSqlScript(String path) throws IOException {ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();resourceDatabasePopulator.addScript(new ClassPathResource(path));// resourceDatabasePopulator.addScript(new FileSystemResource(path));resourceDatabasePopulator.execute(dataSource);
}

注意:文件需要在class path下

本文将文件放入到 src/main/resources/目录下,如下图:

在这里插入图片描述
当服务运行时,时正常时报错,报错信息如下:Caused by: java.io.FileNotFoundException.

详细报错信息如下:

2024-07-19 13:20:24.360  INFO 19320 --- [nio-8000-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-07-19 13:20:24.566  INFO 19320 --- [nio-8000-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-07-19 13:20:24.577 ERROR 19320 --- [nio-8000-exec-1] a.o.e.h.GlobalControllerExceptionHandler : Cannot read SQL script from class path resource [TOo7PxuIIiRtAb7o0djJWEwYyEeL1TIJ90af0l4wZtWj6XPlOh4ARP7HNE91PKvp.sql]; nested exception is java.io.FileNotFoundException: class path resource [TOo7PxuIIiRtAb7o0djJWEwYyEeL1TIJ90af0l4wZtWj6XPlOh4ARP7HNE91PKvp.sql] cannot be opened because it does not existorg.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from class path resource [TOo7PxuIIiRtAb7o0djJWEwYyEeL1TIJ90af0l4wZtWj6XPlOh4ARP7HNE91PKvp.sql]; nested exception is java.io.FileNotFoundException: class path resource [TOo7PxuIIiRtAb7o0djJWEwYyEeL1TIJ90af0l4wZtWj6XPlOh4ARP7HNE91PKvp.sql] cannot be opened because it does not existat org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:239) ~[spring-jdbc-5.3.24.jar:5.3.24]at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:254) ~[spring-jdbc-5.3.24.jar:5.3.24]at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:54) ~[spring-jdbc-5.3.24.jar:5.3.24]at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.execute(ResourceDatabasePopulator.java:269) ~[spring-jdbc-5.3.24.jar:5.3.24]at com.angel.ocean.service.impl.OemAppDataServiceImpl.executeSqlScript(OemAppDataServiceImpl.java:239) ~[classes/:na]at com.angel.ocean.service.impl.OemAppDataServiceImpl.importSqlFile(OemAppDataServiceImpl.java:130) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.24.jar:5.3.24]at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-5.3.24.jar:5.3.24]at com.sun.proxy.$Proxy73.importSqlFile(Unknown Source) ~[na:na]at com.angel.ocean.controller.OemAppDataController.importSqlFile(OemAppDataController.java:51) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.24.jar:5.3.24]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.24.jar:5.3.24]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.24.jar:5.3.24]at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.3.24.jar:5.3.24]at javax.servlet.http.HttpServlet.service(HttpServlet.java:696) [tomcat-embed-core-9.0.69.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.24.jar:5.3.24]at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) [tomcat-embed-core-9.0.69.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.24.jar:5.3.24]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.24.jar:5.3.24]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.24.jar:5.3.24]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.24.jar:5.3.24]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.24.jar:5.3.24]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.24.jar:5.3.24]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.69.jar:9.0.69]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.69.jar:9.0.69]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]
Caused by: java.io.FileNotFoundException: class path resource [TOo7PxuIIiRtAb7o0djJWEwYyEeL1TIJ90af0l4wZtWj6XPlOh4ARP7HNE91PKvp.sql] cannot be opened because it does not existat org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:199) ~[spring-core-5.3.24.jar:5.3.24]at org.springframework.core.io.support.EncodedResource.getReader(EncodedResource.java:146) ~[spring-core-5.3.24.jar:5.3.24]at org.springframework.jdbc.datasource.init.ScriptUtils.readScript(ScriptUtils.java:328) ~[spring-jdbc-5.3.24.jar:5.3.24]at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:236) ~[spring-jdbc-5.3.24.jar:5.3.24]... 63 common frames omitted

如何解决上述报错呢?

不使用classpath相对路径 resourceDatabasePopulator.addScript(new ClassPathResource(path)),使用文件系统的绝对路径:resourceDatabasePopulator.addScript(new FileSystemResource(path)).

如下所示:

/*** 执行sql脚本* @throws SQLException*/
private void executeSqlScript(String path) throws IOException {ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();// resourceDatabasePopulator.addScript(new ClassPathResource(path));resourceDatabasePopulator.addScript(new FileSystemResource(path));resourceDatabasePopulator.execute(dataSource);
}

注意:这个path是系统的绝对路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学懂C语言(十二):C语言中的二进制原理及应用

目录 1. 二进制原理 1.1 什么是二进制? 1.2 如何在C语言中表示二进制? 2. 二进制的表示 2.1 二进制和其他进制的转换 2.2 C语言中的二进制表示 3. 二进制运算 3.1 位运算符 3.2 计算过程示例 4. 应用示例 4.1 使用位运算实现开关 5. 总结 C语…

对于join阻塞主线程而引出的其存在的意义的讨论

join() 在C多线程编程中虽然会阻塞主线程,但它存在的意义是非常重要的: 确保线程完成执行:join() 可以保证子线程完成其任务后,主线程才继续执行. 这对于需要子线程结果的场景非常重要。资源管理:join() 允许主线程等…

电脑永久性不小心删除了东西还可以恢复吗 电脑提示永久性删除文件怎么找回 怎么恢复电脑永久删除的数据

永久删除电脑数据的操作,对于很多常用电脑设备的用户来说,可以说时有发生!但是,因为这些情况大都发生在不经意间,所以每每让广大用户感觉到十分苦恼。永久删除也有后悔药,轻松找回电脑中误删的文件。恢复文…

Ubuntu64新安装时问题的解决

一、vi中输入i没进入Insert模式 进行vim的安装,sudo apt-get install -y vim 二、Windows软件连接不上Ubuntu 在Ubuntu命令行模式下检查网络,发现ping baidu.com存在100%丢包问题,说明系统没有联网,检查ssh已经安装。修改ssh配置…

Git提交到错误分支怎么办?(解决办法)

如果你不小心将代码提交到了错误的分支,不用担心,你可以按照以下步骤将提交内容转移到正确的分支。以下是详细的步骤: 1. 确认当前状态 首先,确认你当前的分支和提交记录。 git status git log2. 切换到正确的分支 假设你已经…

C#定时发送邮件功能

C#定时发送邮件功能 背景 自动运维监控客户端在自动关闭时,需要给实施同学发送提醒邮件。支持163邮箱、qq邮箱、火狐邮箱等各种通用邮箱。 定时器发送邮件 代码 邮件功能模块 using ITSLog.LogManage; using System; using System.Collections.Generic; using…

使用Python创建和扫描二维码

二维码(Quick Response code)已成为在物理和数字领域之间架起桥梁的多功能工具。从分享联系信息和网站链接到促进支付和跟踪库存,二维码在各个行业中找到了应用。通过利用Python的功能,用户可以自动化生成个性化的二维码&#xff…

EtherCAT使用教程:在C++中的详细应用

引言 EtherCAT(Ethernet for Control Automation Technology)是一种高性能的以太网技术,专门用于实时控制系统。它广泛应用于工业自动化、机器人控制、伺服控制以及很多其他领域。本文将详细介绍如何在C中使用EtherCAT,以便开发人…

git clone超时的解决方法

问题描述:在克隆一个仓库的时候,报错如下 git clone https://github.com/TeamWiseFlow/wiseflow.git Cloning into wiseflow... fatal: unable to access https://github.com/TeamWiseFlow/wiseflow.git/: Failed to connect to github.com port 443 aft…

【单片机毕业设计选题24074】-基于阿里云的空气质量监控系统

系统功能: 手机开启2.4G WiFi热点后再给系统上电 系统操作说明: 上电后OLED显示 “欢迎使用空气监控系统请稍后”,两秒后显示Connecting...表示 正在连接阿里云,正常连接阿里云后显示第一页面,如长时间显示Connecting...请 检…

longjmp和多线程

看到有人用setjmp()/longjmp() 做的多线程例子。这种方法极容易造成堆栈冲突。非常不赞成这么用。如果用多线程,linux当然用pthread线程库。windows当然用CreateThread()。 原例子这里就不展示了。感兴趣可以自己搜索“setjmp 协程”。这里做了大幅修改&#xff0c…

【SpringBoot】测试Control接口方法

测试Controller接口方法: 执行单元测试: MockHttpServletRequest: HTTP Method POST Request URI /hello Parameters { } Headers [ Content-Type:"application/json;charsetUTF-8"] Body null Session Attrs { } Handler: Type com.weiz.helloworld.web.…

Nodejs—创建简易WebSocket通信过程详解

文章目录 安装NodejsWindows 安装Linux 源码安装 WebSocket简介WebSocket 与 AJAX 轮询的区别WebSocket的属性核心事件处理器 WebSocket使用示例设置 Node.js WebSocket 服务器创建客户端 HTML 页面运行 WebSocket 服务器和客户端 安装Nodejs Windows 安装 下载地址&#xff…

KTV点歌系统有什么作用?

在娱乐场所中,KTV点歌系统作为一种多功能的多媒体服务设施,为顾客提供了便捷的操作界面,使他们能够选择并播放自己喜爱的歌曲。本项目旨在构建一个高效且用户友好的KTV点歌系统,并不断进行优化以提升其性能和用户体验。尽管目前该…

发现FionaAI:免费体验最新的GPT-4o Mini模型!

你现在可以在FionaAI上免费体验OpenAI刚刚发布的GPT-4o Mini模型!作为您在Google Chrome中的ChatGPT驱动助手,FionaAI可以随时随地与您对话,帮助您轻松创作和处理文本。 为什么选择GPT-4o Mini? 最新技术:GPT-4o Mini是…

8个特征工程技巧提升机器学习预测准确性

引言 对于机器学习从业者来说,掌握各种特征工程技巧是非常有帮助的。毕竟,特征是影响机器学习和深度学习模型实时表现的关键因素。在机器学习领域,提升模型预测准确性的关键之一是选择合适的特征,并剔除那些对模型性能影响不大的特…

git修改提交姓名

git config --global user.name “新用户名” git config --global user.email “新邮箱地址” 修改提交的用户名 git config --global user.name “yu***”

Vue 多选下拉框+下拉框列表中增加标签

1、效果图 2、代码部分 &#xff08;1&#xff09;代码 <el-select class"common-dialog-multiple multipleSelectStyle" change"clusterListChange" v-model"form.clusterId" placeholder"请先选择" multiple filterable defaul…

将本机的ssh密钥添加到git服务器中,要怎么实现?

前言 本文是该专栏的第2篇&#xff0c;后面将持续分享git的干货知识&#xff0c;记得关注。 本文&#xff0c;笔者将主要来介绍“针对“ssh密钥添加到git服务器”的相关方法。具体细节部分以及完整代码的实现以及思路&#xff0c;跟着笔者直接往下看正文内容。 正文 将本机的S…

web前端 Vue 框架面试120题(四)

面试题 61 . 简述Vue computed 和 watch 的区别和运用的场景 &#xff1f; 参考回答&#xff1a; 一、Computed 在Vue.js&#xff0c;computed 是一个非常有用的属性&#xff0c;它允许声明计算属性&#xff0c;这些属性会根据其依赖的数据进行自动更新&#xff0c;而无需手动…