ResourceDatabasePopulator 初始化函数及存储过程

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;
    }
}