Appearance
Data Initializer
Squizy provides a mechanism to seed the database with initial data when the application starts.
Not for production
SquizyDataInitializer is designed for demos, POCs, and quick prototyping. For production data initialization, use dedicated database migration tools such as Flyway or Liquibase.
SquizyDataInitializer Interface
Implement the SquizyDataInitializer interface and register it as a Spring bean:
java
@Component
public class DataInitializer implements SquizyDataInitializer {
private final SquizyRepository<Category, Long> categoryRepository;
private final SquizyRepository<Product, String> productRepository;
public DataInitializer(
final SquizyRepository<Category, Long> categoryRepository,
final SquizyRepository<Product, String> productRepository) {
this.categoryRepository = categoryRepository;
this.productRepository = productRepository;
}
@Override
public void initialize() {
Category electronics = categoryRepository.save(Category.of("Electronics"));
Category clothing = categoryRepository.save(Category.of("Clothing"));
productRepository.save(Product.of("AB-001", "Headphones", Status.IN_STOCK,
BigDecimal.valueOf(199.99), electronics));
}
}How It Works
- All
SquizyDataInitializerbeans are collected by theSquizyInitDataProcessor - On
ApplicationReadyEvent, they are executed in order within a single transaction - A temporary security context is set up with a system user so that
@OwnerFieldand audit trails work correctly during initialization - After all initializers run, the security context is cleaned up
The initialize() method runs with @Transactional(propagation = Propagation.MANDATORY) — all initializers either succeed or fail together.
Multiple Initializers
Use Spring's @Order annotation to control execution order:
java
@Order(1)
@Component
public class MasterDataInitializer implements SquizyDataInitializer {
@Override
public void initialize() {
// Create countries, states, cities...
}
}
@Order(2)
@Component
public class DemoDataInitializer implements SquizyDataInitializer {
@Override
public void initialize() {
// Create demo data (depends on master data)...
}
}INFO
Check for existing data before inserting when using persistent databases. The initializer runs on every application start.
See Also
- User Initializer — bootstrap initial users at startup