利⽤ScriptRunner执⾏sql⽂件
利⽤ScriptRunner执⾏sql⽂件
最有遇到⼀个需求,要读取sql⽂件并执⾏,由于我⽐较懒所以不打算读取⽂件中的sql执⾏⽽是执⾏sql⽂件,所以这⾥⽤到了ScriptRunner(需要依赖mybatis jar包)
1、引⼊mybatis
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
不是SpringBoot项⽬的可以引⽤
<!-- mvnrepository/batis/mybatis -->
<dependency>
<groupId&batis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
2、获取DataSource
这要注意,不能直接注⼊项⽬的DataSource,也不能通过Jdbctemplate获取,因为如果这要获取的情况下,在使⽤完ScriptRunner后会是Jdbctemplate在执⾏插⼊、更新操作是⽆效(可以执⾏但是没有结果 原因未知 [尴尬])。然后我就想到了再创建⼀个DataSource 如下:
package com.onfig;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
batis.spring.SqlSessionFactoryBean;
batis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.Primary;
import io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
*  获取据源
*/
@Configuration
public class DataPrimarySourceConfig {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String user;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClass;
@Bean(name = "masterDataSource")
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);jdbctemplate和mybatis
return dataSource;
}
}
3、执⾏sql⽂件
/**
* 执⾏sql⽂件
* @param filePath
* @param conn
* @throws IOException
* @throws SQLException
*/
public void exceteSqlFile(String filePath,Connection conn) throws IOException, SQLException {        ScriptRunner runner = new ScriptRunner(conn);
Resources.setCharset(Charset.forName("UTF-8"));
runner.setLogWriter(null);//设置是否输出⽇志
runner.ResourceAsReader(filePath));
runner.closeConnection();
conn.close();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。