【问题标题】:@Configuration class is not called@Configuration 类没有被调用
【发布时间】:2017-06-29 15:43:53
【问题描述】:

在我的 spring 应用程序中,我正在使用 h2,并且我正在尝试在 db 中填充数据。

这是我的课:

@Entity
@Data
public class User {

    @Id
    @GeneratedValue
    Long id;

    String  username;
    String  password;
    String  role;
    boolean activated;
}

然后我看到this 的问题,并制作了以下类来填充其中的数据

@Configuration

public class DataBaseInitializer {

@Value("classpath:schema.sql")
private Resource schemaScript;


@Value("classpath: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(schemaScript);
        populator.addScript(dataScript);
       System.out.println("data shoul be populated");
        return populator;
        }
}

src/main/resources-文件夹schema.sql 我有:

insert into user (id,activated,password,role,username)values(4,true,'12345','Admin','admin');

schema.sql 文件是:

create table 
    if not exists
        user (  id int not null primary key,
                username varchar(50) not null,
                password varchar(50) not null, 
                activated boolean not null,
                role varchar(50) not null);

我已经添加了spring.datasource.initialize=true 不幸的是,当我运行应用程序时,用户表上没有记录

我将调试设置为 System.out.println("data shoul be populated");,但它从未在我的控制台中打印出来

【问题讨论】:

  • 你使用的是hibernate还是jpa @Entity?如果是 JPA,那么您可以查看规范并设置属性。 “spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=some-schema.sql”和“spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create”休眠与弹簧数据相似。

标签: java spring hibernate


【解决方案1】:

如果您查看有关数据库初始化的 Spring Data JPA 参考手册:link,它指出框架在初始化期间会考虑两个不同的文件:schema.sqldata.sql

如果你想覆盖模式的自动生成(或省略它),那么你填写schema.sql

一旦创建了模式,spring 就会调用 data.sql 中包含的语句。这是您要放置插入语句的地方。如果您将它们放在schema.sql 中并且不将 DDL 语句放在这些插入之前,那么您将插入到不存在的表中。

在您的 application.properties 文件中,您可能还需要这个:

spring.datasource.initialize=true

【讨论】:

  • 我已经更新了我的任务。现在,桌子上没有记录
猜你喜欢
  • 1970-01-01
  • 2014-12-27
  • 2019-11-17
  • 2020-10-28
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多