package cn.org.rapid_framework.test.hsql;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.nio.charset.Charset;
import javax.sql.DataSource;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.core.io.Resource;
/**
* FactoryBean用于创建一个hsql内存数据库的DataSource并同时运行初始化的数据库脚本
*
* sql语句之间的语句使用分号";"分隔
*
* @author badqiu
*
*/
public class HSQLMemDataSourceFactoryBean implements FactoryBean{
private Resource[] scriptLocations;
private String sqlScript;
private String encoding = Charset.defaultCharset().name();
public HSQLMemDataSourceFactoryBean(){}
public HSQLMemDataSourceFactoryBean(Resource initScriptsLocation,String encoding) {
this.scriptLocations = new Resource[] {initScriptsLocation};
this.encoding = encoding;
}
public void setScriptLocations(Resource... initScriptsLocation) {
this.scriptLocations = initScriptsLocation;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public void setSqlScript(String sqlScript) {
this.sqlScript = sqlScript;
}
public Object getObject() throws Exception {
DataSource ds = HSQLMemDataSourceUtils.getDataSource();
if(scriptLocations != null) {
for(Resource r : scriptLocations) {
HSQLMemDataSourceUtils.executeSqlScripts(new InputStreamReader(r.getInputStream(),encoding), ds);
}
}
if(sqlScript != null) {
HSQLMemDataSourceUtils.executeSqlScripts(new StringReader(sqlScript), ds);
}
return ds;
}
public Class getObjectType() {
return DataSource.class;
}
public boolean isSingleton() {
return true;
}
}