【问题标题】:DataSourceInitializer is not working on Spring boot 1.2DataSourceInitializer 在 Spring Boot 1.2 上不起作用
【发布时间】:2016-01-12 10:47:20
【问题描述】:

我是 Spring boot 的新手。我想在数据库创建时添加一些 sql,就像种子数据一样。

@Value("classpath:com/foo/sql/db-test-data.sql")
private Resource dataScript;

@Bean
public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {
    final DataSourceInitializer initializer = new DataSourceInitializer();
    initializer.setDataSource(dataSource);
    initializer.setDatabasePopulator(databasePopulator());
    return initializer;
}

private DatabasePopulator databasePopulator() {
    final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
    populator.addScript(dataScript);
    return populator;
}

props.put("hibernate.query.substitutions", "true 1, false 0");
        props.put("hibernate.hbm2ddl.auto", "create-drop");
        props.put("hibernate.show_sql", "false");
        props.put("hibernate.format_sql", "true");

我已经执行了这个操作。但是它在 spring boot 上不起作用。任何人都可以帮助我。

【问题讨论】:

    标签: mysql spring spring-mvc spring-boot


    【解决方案1】:

    有时spring-boot 得到的好处多于帮助;恕我直言,对于 Web 应用程序尤其如此。

    您可以做的就是重命名您定义的 bean。

    @Bean("springBootPleaseStopTellingMeHowYouThinkDataSourceInitializer")
    public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
        // build it.
    }
    

    现在,关闭在application.properties 中查找data.sql 的内置位

    spring.datasource.initialize=false
    

    在那里,现在引导已经被引导了。

    【讨论】:

    • 我认为这比接受的答案更好,因为它暗示了为什么 DataSourceInitializer 在原始问题中不起作用:因为具有该 ID 的 bean 已经存在。不过,我更喜欢的一种解决方案是重命名该方法,因为这是生成 bean 名称的原因,而不是将字符串文字值添加到 @Bean 注释中。不过还是谢谢你让我走上正轨。
    • 在我的例子中,该项目是一个 spring boot 项目,但没有使用它的任何注释。类路径中没有 application.properties 文件,仍然 DataSourceInitializer bean 不会运行。为 DataSourceInitializer bean 提供自定义名称使其工作。此答案提供了对问题所在及其解决方法的洞察。
    【解决方案2】:

    您可以利用 Spring Boot 数据库初始化功能。最简单的方法是将“data.sql”文件放在类路径的根目录中。所以你只需要:

    • 将您的 sql 文件名更改为“data.sql”。
    • 将其放在“src/main/resources”中。

    Spring Boot 会自动拾取文件并在启动时使用它来初始化数据库。

    如需自定义文件名、位置等可查看documentation

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 2021-06-18
      • 1970-01-01
      • 2015-03-15
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多