Próbuję mieć konfigurację bazy danych H2 podczas uruchamiania aplikacji rozruchowej. Mam skonfigurowane bazy danych w application.properties:Aplikacja Spring Boot z bazą danych pliku H2
spring.datasource.url = jdbc:h2:file:~/testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver
Plik Application.java:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
CreateH2Database createH2Database = new CreateH2Database();
createH2Database.create();
}
}
CreateH2Database.java:
public class CreateH2Database {
private Logger log = Logger.getLogger(CreateH2Database.class);
@Autowired
protected JdbcTemplate jdbcTemplate;
public void create() {
log.info("Creating H2 Database");
createUsers();
}
private void createUsers() {
log.info("Creating users table");
jdbcTemplate.execute("create table if not exists users (id serial, first_name varchar(255), last_name varchar(255))");
String[] names = "John Woo;Jeff Dean;Josh Bloch;Josh Long".split(";");
for (String fullname : names) {
String[] name = fullname.split(" ");
log.info("Inserting user record for " + name[0] + " " + name[1] + "\n");
jdbcTemplate.update(
"INSERT INTO users(first_name,last_name) values(?,?)",
name[0], name[1]);
}
}
}
Po uruchomieniu aplikacji należy utworzyć Tabela użytkowników, jeśli jeszcze nie istnieje, i wstaw użytkowników do tabeli. Jeśli tabela już istnieje, nie chcę jej modyfikować.
- Dostaję
NullPointerException
najdbcTemplate.execute
. Jak mogę uzyskać wstrzyknięciejdbcTemplate
? Wszystkie przykłady, jakie widziałem, wymagają ręcznego utworzenia źródła danych, a następnie utworzenia JdbcTemplate. Jednak źródło danych w tym przykładzie wydaje się być tworzone na podstawie wartości application.properties. - Czy to jest prawidłowe podejście do konfiguracji bazy danych (np. Wywołanie
CreateH2Database
po uruchomieniu SpringApplication)? Czy to podejście zadziała, jeśli chcę uruchomić aplikację jako WAR na innym serwerze aplikacji?
Dzięki za odpowiedź. Próbowałem wcześniej dodać pliki 'schema.sql' i' data.sql'. Jednak spowoduje to załadowanie danych z 'data.sql' przy każdym uruchomieniu aplikacji. Muszę to aktywować, jeśli dane nie zostały wypełnione, aby je dodać. Czy istnieje sposób na określenie warunków takich jak przy starcie? – Jerry
Co, jeśli mam testy jednostkowe i integracyjne i chcę je uruchomić? W tej chwili mogę uruchomić kilka testów integracyjnych, ale kiedy dodaję test jednostkowy, to zawiedzie i mówi mi, że tabela już istnieje. – tObi
@tobi Byłoby miło zobaczyć dokładnie, jak wygląda twoja sprawa. Czy mógłbyś utworzyć nowe pytanie ze wszystkimi istotnymi szczegółami i opublikować link tutaj? Dzięki – geoand