在我的spring应用程序中,我使用了h2,并且我试图在db中填充数据。
下面是我的类:
@Entity
@Data
public class User {
@Id
@GeneratedValue
Long id;
String username;
String password;
String role;
boolean activated;
}然后我看到了this question,并创建了以下类来填充其中的数据
@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-folder 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,当我运行应用程序时,user表上没有记录
我将调试设置为System.out.println("data shoul be populated");,但它从未在我的控制台中打印出来
发布于 2017-02-11 18:02:46
如果您查看关于数据库初始化的Spring Data JPA参考手册:link,它指出框架在初始化期间需要考虑两个不同的文件:schema.sql和data.sql。
如果您想覆盖模式的自动生成(或忽略它),则需要填写schema.sql。
一旦创建了模式,spring就会调用data.sql中包含的语句。这是您想要放置insert语句的位置。如果您将它们放在schema.sql中,而不是将DDL语句放在这些插入之前,那么您将插入到不存在的表中。
在您的application.properties文件中,您可能还需要以下内容:
spring.datasource.initialize=truehttps://stackoverflow.com/questions/42173848
复制相似问题