在我的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");
,但它永远不会在我的控制台中打印
答案 0 :(得分:0)
如果查看有关数据库初始化的Spring Data JPA参考手册:link,它指出有两个不同的文件,框架在初始化期间考虑:schema.sql
和{{1} }。
如果要覆盖架构的自动生成(或省略),请填写data.sql
。
一旦创建了模式,spring就会调用schema.sql
中包含的语句。这是您要放置insert语句的位置。如果将它们放在data.sql
中并且不在这些插入之前放置DDL语句,那么您将插入不存在的表。
在您的application.properties文件中,您可能还需要:
schema.sql