Programska konfiguracija izvora podataka u proljetnom pokretanju

1. Pregled

Spring Boot koristi vlastiti algoritam za skeniranje i konfiguriranje a Izvor podataka. To nam omogućuje da lako dobijemo potpuno konfiguriranu Izvor podataka implementacija prema zadanim postavkama.

Uz to, Spring Boot automatski konfigurira spremište brzih veza - bilo HikariCP, Apache Tomcat ili Commons DBCP, tim redoslijedom, ovisno o tome koji se nalaze na putu predavanja.

Dok je Spring Boot automatski Izvor podataka konfiguracija u većini slučajeva djeluje vrlo dobro, ponekad će nam trebati viša razina kontrole, pa ćemo morati postaviti svoje Izvor podataka implementacije, dakle preskačući postupak automatske konfiguracije.

U ovom uputstvu naučit ćemo kako konfigurirati Izvor podataka programski u Spring Boot.

2. Ovisnosti Mavena

Stvaranje a Izvor podataka Programska je provedba, sveukupno, jednostavna.

Da bismo naučili kako to postići, implementirat ćemo jednostavan sloj spremišta, koji će izvoditi CRUD operacije na nekim JPA entitetima.

Pogledajmo ovisnosti našeg demo projekta:

 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 2.4.1 runtime 

Kao što je gore prikazano, koristit ćemo instancu H2 baze podataka u memoriji za vježbanje sloja spremišta. Pritom ćemo moći testirati naše programski konfigurirane Izvor podataka, bez troškova izvođenja skupih operacija baze podataka.

Uz to, provjerimo najnoviju verziju spring-boot-starter-data-jpa na Maven Central.

3. Konfiguriranje a Izvor podataka Programski

Ako se pridržavamo automatike Spring Boota Izvor podataka konfiguraciju i pokrenite naš projekt u trenutnom stanju, on će raditi samo kako se očekivalo.

Spring Boot će za nas obaviti svu tešku infrastrukturnu instalaciju. To uključuje stvaranje H2 Izvor podataka implementaciju, kojom će automatski rukovati HikariCP, Apache Tomcat ili Commons DBCP i postavljanje instance baze podataka u memoriji.

Uz to, nećemo trebati niti stvoriti primjena.svojstva datoteku, jer će Spring Boot pružiti i neke zadane postavke baze podataka.

Kao što smo već spomenuli, ponekad će nam trebati viša razina prilagodbe, stoga ćemo morati programski konfigurirati vlastiti Izvor podataka provedba.

Najjednostavniji način da se to postigne je definiranjem a Izvor podataka tvornička metoda i stavljanje u klasu označenu s @Konfiguracija bilješka:

@Configuration javna klasa DataSourceConfig {@Bean public DataSource getDataSource () {DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create (); dataSourceBuilder.driverClassName ("org.h2.Driver"); dataSourceBuilder.url ("jdbc: h2: mem: test"); dataSourceBuilder.username ("SA"); dataSourceBuilder.password (""); vratiti dataSourceBuilder.build (); }}

U ovom slučaju, koristili smo pogodnost DataSourceBuilder razred - netečna verzija graditeljskog uzorka Joshua Blocha - da programski stvorimo svoj običaj Izvor podataka objekt.

Ovaj je pristup zaista lijep jer graditelj olakšava konfiguriranje a Izvor podataka koristeći neka zajednička svojstva. Uz to, koristi i temeljni bazen veza.

4. Eksternaliziranje Izvor podataka Konfiguracija s primjena.svojstva Datoteka

Naravno, moguće je i djelomično eksternalizirati naše Izvor podataka konfiguracija. Na primjer, mogli bismo definirati neke osnovne Izvor podataka svojstva u našoj tvorničkoj metodi:

@Bean public DataSource getDataSource () {DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create (); dataSourceBuilder.username ("SA"); dataSourceBuilder.password (""); vratiti dataSourceBuilder.build (); }

I navedite nekoliko dodatnih u primjena.svojstva datoteka:

spring.datasource.url = jdbc: h2: mem: test spring.datasource.driver-class-name = org.h2.Driver 

Svojstva definirana u vanjskom izvoru, poput gore navedenog primjena.svojstva datoteku ili putem klase označene s @ConfigurationProperties, poništit će one definirane u Java API-ju.

Postaje očito da, s ovim pristupom, više nećemo držati svoje Izvor podataka konfiguracijske postavke pohranjene na jednom mjestu.

S druge strane, omogućuje nam da konfiguracijske postavke vremena kompajliranja i vremena izvođenja držimo lijepo odvojene jedna od druge.

Ovo je stvarno dobro, jer nam omogućuje lako postavljanje točke vezivanja konfiguracije. Na taj način možemo uključiti različite Izvor podataka postavke iz drugih izvora, bez potrebe za refaktoriranjem naših tvorničkih metoda graha.

5. Ispitivanje Izvor podataka Konfiguracija

Testiranje našeg običaja Izvor podataka konfiguracija je vrlo jednostavna. Cijeli se postupak svodi na stvaranje JPA entiteta, definiranje osnovnog sučelja spremišta i testiranje sloja spremišta.

5.1. Stvaranje JPA entiteta

Počnimo definirati naš uzorak klase JPA entiteta, koji će modelirati korisnike:

@Entity @Table (name = "users") javna klasa Korisnik {@Id @GeneratedValue (strategy = GenerationType.AUTO) private long id; privatni naziv niza; privatni String e-mail; // standardni konstruktori / postavljači / getteri / toString}

5.2. Jednostavan sloj spremišta

Dalje, moramo implementirati osnovni sloj spremišta, koji nam omogućuje izvođenje CRUD operacija na instancama Korisnik gore definirana klasa entiteta.

Budući da koristimo Spring Data JPA, ne moramo stvoriti vlastitu DAO implementaciju od nule. Jednostavno moramo proširiti CrudRepository sučelje za dobivanje funkcionalne implementacije spremišta:

Javno sučelje @Repository UserRepository proširuje CrudRepository {} 

5.3. Testiranje sloja spremišta

Na kraju, moramo provjeriti je li naš programski konfiguriran Izvor podataka zapravo djeluje. To možemo lako postići integracijskim testom:

@RunWith (SpringRunner.class) @DataJpaTest javna klasa UserRepositoryIntegrationTest {@Autowired private UserRepository userRepository; @Test public void whenCalledSave_thenCorrectNumberOfUsers () {userRepository.save (new User ("Bob", "[email protected]")); Popis korisnika = (Popis) userRepository.findAll (); assertThat (users.size ()). isEqualTo (1); }}

The UserRepositoryIntegrationTest čas je prilično objašnjen. Jednostavno vježba dvije CRUD metode sučelja spremišta za ustrajanje i pronalaženje entiteta.

Primijetite da bez obzira na to odlučimo li programski konfigurirati svoj Izvor podataka implementaciju ili je podijeliti na Java konfiguracijsku metodu i primjena.svojstva datoteku, uvijek bismo trebali dobiti ispravnu vezu s bazom podataka.

5.4. Pokretanje uzorka aplikacije

Napokon, našu demo aplikaciju možemo pokrenuti koristeći standard glavni() metoda:

@SpringBootApplication javna klasa Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); } @Bean javno izvršavanje CommandLineRunner (UserRepository userRepository) baca iznimku {return (String [] args) -> {User user1 = novi korisnik ("John", "[email protected]"); Korisnik user2 = novi korisnik ("Julie", "[e-pošta zaštićena]"); userRepository.save (user1); userRepository.save (user2); userRepository.findAll (). forEach (korisnik -> System.out.println (korisnik);};}} 

Već smo testirali sloj spremišta, pa smo sigurni da je naš Izvor podataka je uspješno konfiguriran. Stoga, ako pokrenemo uzorak aplikacije, u izlazu naše konzole trebali bismo vidjeti popis Korisnik entiteti pohranjeni u bazi podataka.

6. Zaključak

U ovom vodiču, naučili smo kako konfigurirati a Izvor podataka implementacija programski u Spring Boot.

Kao i obično, svi uzorci koda prikazani u ovom vodiču dostupni su na GitHubu.