Proljetni podaci MongoDB transakcije

1. Pregled

Počevši od izdanja 4.0, MongoDB podržava ACID transakcije s više dokumenata. I, Spring Data Lovelace sada pruža podršku za ove izvorne MongoDB transakcije.

U ovom uputstvu razgovarat ćemo o podršci Spring Data MongoDB za sinkrone i reaktivne transakcije.

Također ćemo pogledati Spring Data TransactionTemplate za podršku stranim transakcijama.

Za uvod u ovaj modul Spring Data pogledajte naš uvodni rad.

2. Postavljanje MongoDB 4.0

Prvo ćemo morati postaviti najnoviji MongoDB da bismo isprobali novu podršku za matične transakcije.

Za početak moramo preuzeti najnoviju verziju iz MongoDB centra za preuzimanje.

Dalje ćemo početi mongod usluga pomoću naredbenog retka:

mongod --replSet rs0

Napokon, pokrenite set replika - ako već nije:

mongo --eval "rs.initiate ()"

Imajte na umu da MongoDB trenutno podržava transakcije preko skupa replika.

3. Konfiguracija Mavena

Dalje, trebamo dodati sljedeće ovisnosti u naš pom.xml:

 org.springframework.data spring-data-mongodb 3.0.3.OBLAŽENJE 

Najnovije izdanje knjižnice može se naći na Središnjem spremištu

4. MongoDB konfiguracija

Sada, pogledajmo našu konfiguraciju:

@Configuration @EnableMongoRepositories (basePackages = "com.baeldung.repository") javna klasa MongoConfig proširuje AbstractMongoClientConfiguration {@Bean MongoTransactionManageractionManager (MongoDatabaseFactory dbFactory) {action new MongoaTrabFab; } @Override zaštićeni niz getDatabaseName () {return "test"; } @Override public MongoClient mongoClient () {final ConnectionString connectionString = new ConnectionString ("mongodb: // localhost: 27017 / test"); konačni MongoClientSettings mongoClientSettings = MongoClientSettings.builder () .applyConnectionString (connectionString) .build (); return MongoClients.create (mongoClientSettings); }}

Imajte na umu da trebamo se registrirati MongoTransactionManager u našoj konfiguraciji kako bismo omogućili izvorne MongoDB transakcije jer su one onemogućene prema zadanim postavkama.

5. Sinkrone transakcije

Nakon što smo završili konfiguraciju, sve što trebamo učiniti da bismo koristili izvorne MongoDB transakcije - jest označite našu metodu s @Transational.

Sve unutar anotirane metode izvršit će se u jednoj transakciji:

@Test @Transactional javna praznina kadaPerformMongoTransaction_thenSuccess () {userRepository.save (novi korisnik ("John", 30)); userRepository.save (novi korisnik ("Ringo", 35)); Upit upita = novi upit (). AddCriteria (Criteria.where ("ime"). Je ("John")); Popis korisnika = mongoTemplate.find (upit, User.class); assertThat (users.size (), je (1)); }

Imajte na umu da ne možemo koristiti listCollections naredba unutar transakcije s više dokumenata - na primjer:

@Test (očekuje se = MongoTransactionException.class) @Transactional javna praznina whenListCollectionDuringMongoTransaction_thenException () {if (mongoTemplate.collectionExists (User.class)) {mongoTemplate.save (novi korisnik ("John", 30)); mongoTemplate.save (novi korisnik ("Ringo", 35)); }}

Ovaj primjer baca a MongoTransactionException kao što smo koristili collectionExists () metoda.

6. TransactionTemplate

Vidjeli smo kako Spring Data podržavaju novu izvornu transakciju MongoDB. Uz to, Spring Data također nudi i opciju koja nije izvorna.

Transakcije koje nisu izvorne možemo izvršiti pomoću Spring Data TransactionTemplate:

@Test javna praznina givenTransactionTemplate_whenPerformTransaction_thenSuccess () {mongoTemplate.setSessionSynchronization (SessionSynchronization.ALWAYS); TransactionTemplateactionTemplate = novi TransactionTemplate (mongoTransactionManager); actionTemplate.execute (new TransactionCallbackWithoutResult () {@Override protected void doInTransactionWithoutResult (Status TransactionStatus) {mongoTemplate.insert (novi korisnik ("Kim", 20)); mongoTemplate.insert (novi korisnik ("Jack", 45));} ;}); Upit upita = novi upit (). AddCriteria (Criteria.where ("name"). Is ("Jack")); Popis korisnika = mongoTemplate.find (upit, User.class); assertThat (users.size (), je (1)); }

Moramo postaviti SjednicaSinkronizacija do STALNO za upotrebu stranih transakcija Spring Data.

7. Reaktivne transakcije

Na kraju ćemo pogledati Proljetna podrška podataka za MongoDB reaktivne transakcije.

Morat ćemo dodati još nekoliko ovisnosti na pom.xml za rad s reaktivnim MongoDB-om:

 org.mongodb mongodb-driver-reaktivni tokovi 4.1.0 org.mongodb mongodb-driver-sync 4.0.5 io.projectreactor reaktor-test 3.2.0.ISPUSTI test 

Ovisnosti mongodb-driver-reactivestream, mongodb-driver-sync i reactor-test ovisnosti dostupne su na Maven Central.

I naravno, moramo konfigurirati naš Reactive MongoDB:

@Configuration @EnableReactiveMongoRepositories (basePackages = "com.baeldung.reactive.repository") javna klasa MongoReactiveConfig proširuje AbstractReactiveMongoConfiguration {@Override public MongoClient reactiveMongoClient () {return MongoClients.create (); } @Override zaštićeni niz getDatabaseName () {return "reaktivan"; }}

Da bismo koristili transakcije u reaktivnom MongoDB-u, moramo koristiti inTransaction () metoda u ReactiveMongoOperations:

@Autowired private ReactiveMongoOperations reactiveOps; @Test public void whenPerformTransaction_thenSuccess () {User user1 = novi korisnik ("Jane", 23); Korisnik user2 = novi korisnik ("John", 34); reactiveOps.inTransaction () .execute (action -> action.insert (user1). then (action.insert (user2))); }

Više informacija o reaktivnim spremištima u Spring Data dostupno je ovdje.

8. Zaključak

U ovom tekstu naučili smo kako koristiti izvorne i tuđe transakcije MongoDB koristeći Spring Data.

Potpuni izvorni kod za primjere dostupan je na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found