data 是ddl,func是函数
因ResourceDatabasePopulator 的默认语句分隔符就是英文分号。函数及存储过程中,必须用到。改动默认分隔符为二个英文分号
并把ddl中默认语句结束符一个分号改成2个。即可!
初始化程序
java
@Slf4j
@Configuration
public class DatabaseInitialize {
@Value("classpath:func.sql")
private Resource func;
@Value("classpath:data.sql")
private Resource ddl;
@javax.annotation.Resource
private DataSource dataSource;
@Bean
public DataSourceInitializer dataSourceInitializer() {
final DataSourceInitializer initializer = new DataSourceInitializer();
// 设置数据源
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(databasePopulator());
return initializer;
}
private DatabasePopulator databasePopulator() {
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setSeparator(";;");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
try {
Map map = jdbcTemplate.queryForMap("select count(1) from workflow_types");
} catch (DataAccessException e) {
log.info("无数据表,开始初始化脚本:" + e.getMessage());
// 报错,表不存在,初次导入,执行相关脚本
populator.addScripts(ddl,func);
} catch (Exception e) {
log.warn("初始化脚本报错:" + e.getMessage());
}
return populator;
}
}