springboot启动运行.sql文件自动建表

springboot启动运行.sql文件自动建表

import org.apache.ibatis.jdbc.ScriptRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

/**
 * springboot启动运行.sql文件自动建表
 */
@Configuration
public class InitSqlTableClass {
          
   
	// 这里从.yml配置文件读取数据库连接配置
    @Value("${spring.datasource.name}")
    private String name;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;

    @PostConstruct
    public void test() throws IOException, SQLException {
          
   
    	// 放在项目中.sql文件的路径
        String path = "src/main/resources/sql";
        // 连接数据库
        Connection conn = DriverManager.getConnection(url, username, password);
        // 创建ScriptRunner,用于执行SQL脚本
        ScriptRunner runner = new ScriptRunner(conn);
        runner.setErrorLogWriter(null);
        runner.setLogWriter(null);
        // 获取项目中的所有要执行的sql文件
        File[] files = new File(path).listFiles();
        assert files != null;
        for (File file : files) {
          
   
        		// 执行SQL脚本
                runner.runScript(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
            }
        }
        conn.close();
    }

}
经验分享 程序员 微信小程序 职场和发展