Przeskocz do treści

Baza H2 oraz Spring Boot

Do tej pory korzystałem tylko z baz w MySQL jednak wiedziałem, że istnieje coś takiego jak H2, która jest wbudowana (dołączona) do Spring Boot, wystarczy dodać tylko dwie biblioteki (używam Mavena więc poniżej zależności dla niego).

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

H2 daje możliwość używania jej w pamięci (bazy) ale również można skorzystać z trwalszego zapisu na dysku. Jednak ja postanowiłem użyć w przypadku developingu, cały czas zmieniam komputer i dzięki gitowi mogę przenosić mój kod ale za każdym razem muszę definiować na nowo bazę danych od czego uwalnia mnie wykorzystanie H2.

W zasadzie jeśli po dodaniu zależności i "odpaleniu" projektu pod adresem localhost:8080/h2-console pojawi się strona logowania. Jeśli nic nie zmienimy to logowanie jest użytkownikiem sa i pustym hasłem.

W moim projekcie używam Security dlatego po wpisaniu logowania mam błąd 403. Pierwsze co robię to ustawiam odpowiednie wpisy w moim pliku z konfiguracją Security np. jak poniżej (dane są testowe)

@Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password("{noop}admin")
                .roles("ADMIN")
                .and()
                .withUser("user")
                .password("{noop}user")
                .roles("USER");
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().permitAll()
                .and()
                .authorizeRequests().antMatchers("/h2-console/**").permitAll()
                .and().formLogin();

        http.csrf().disable();
        http.headers().frameOptions().disable();
    }

W powyższym kodzie bardzo ważna jest ostatnia linia bez niej po zalogowaniu przeglądarka nie wyświetli okien aplikacji.

Oczywiście do prawidłowego działania należy jeszcze ustawić odpowiednie wpisy w application.properties, poniżej ponownie przykładowe wpisy (pierwsza linia wskazuje na pracę z bazą w pamięci):

#============  H2 BASE ===========
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
#=================================

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.