当前位置:  开发笔记 > 编程语言 > 正文

在应用程序启动时执行多个脚本

如何解决《在应用程序启动时执行多个脚本》经验,为你挑选了1个好方法。

我将DataSource定义为bean:

@Bean(name="dataSource")
public DriverManagerDataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("org.h2.Driver");
    dataSource.setUrl("jdbc:h2:~/myDB");
    dataSource.setUsername("sa");
    dataSource.setPassword("");
    return dataSource;
}

它工作完美,但是我需要为数据库创建指定模式并在其上加载数据。是否有机会像Spring Data一样执行两个脚本(模式脚本和数据脚本)?我发现的唯一的东西是datasource.setSchema(),以及我所担心的,我必须指定它的完整路径。如果我的模式脚本位于src/main/resources/路径中,那么如何指定它呢?(我确实做了,文档怎么说,但失败并显示一条消息)

发生意外错误(类型=内部服务器错误,状态= 500)。org.springframework.jdbc.CannotGetJdbcConnectionException:无法获取JDBC连接。嵌套的异常是org.h2.jdbc.JdbcSQLException:找不到架构“〜/ schema-h2.sql” [90079-193]

谢谢你的建议



1> victor galle..:

您可以执行以下操作:

import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;

@Bean(name="dataSource")
public DriverManagerDataSource dataSource() {
   DriverManagerDataSource dataSource = new DriverManagerDataSource();
   dataSource.setDriverClassName("org.h2.Driver");
   dataSource.setUrl("jdbc:h2:~/myDB");
   dataSource.setUsername("sa");
   dataSource.setPassword("");

   // schema init
   Resource initSchema = new ClassPathResource("script/schema.sql");
   DatabasePopulator databasePopulator = new ResourceDatabasePopulator(initSchema);
   DatabasePopulatorUtils.execute(databasePopulator, dataSource);

   return dataSource;
}

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有