Tavaszi adatok MongoDB tranzakciók
1. Áttekintés
A 4.0 kiadástól kezdve a MongoDB támogatja a több dokumentumot tartalmazó ACID tranzakciókat. És, A Spring Data Lovelace mostantól támogatja ezeket a natív MongoDB tranzakciókat.
Ebben az oktatóanyagban megvitatjuk a Spring Data MongoDB támogatását a szinkron és reaktív tranzakciókhoz.
Megnézzük a Spring Data-t is TransactionTemplate nem natív tranzakciók támogatása.
A Spring Data modul bevezetéséhez tekintse meg a bevezető írásunkat.
2. A MongoDB 4.0 telepítése
Először be kell állítanunk a legújabb MongoDB-t az új natív tranzakciók támogatásának kipróbálására.
A kezdéshez le kell töltenünk a legújabb verziót a MongoDB letöltő központból.
Ezután kezdjük mongód szolgáltatás a parancssor segítségével:
mongod --replSet rs0
Végül indítsa el a replikaszettet - ha még nem:
mongo --eval "rs.initiate ()"
Ne feledje, hogy a MongoDB jelenleg replikakészleten keresztüli tranzakciókat támogat.
3. Maven konfiguráció
Ezután hozzá kell adnunk a következő függőségeket a sajátunkhoz pom.xml:
org.springframework.data spring-data-mongodb 3.0.3.KÖZLEMÉNY
A könyvtár legújabb kiadása megtalálható a központi adattárban
4. MongoDB konfiguráció
Most nézzük meg a konfigurációnkat:
@Configuration @EnableMongoRepositories (basePackages = "com.baeldung.repository") public class MongoConfig kiterjeszti az AbstractMongoClientConfiguration {@Bean MongoTransactionManageractionManager (MongoDatabaseFactory dbFactory) db {return new Mongo } @Orride védett karakterlánc getDatabaseName () {return "teszt"; } @Orride public MongoClient mongoClient () {final ConnectionString connectionString = new ConnectionString ("mongodb: // localhost: 27017 / test"); final MongoClientSettings mongoClientSettings = MongoClientSettings.builder () .applyConnectionString (connectionString) .build (); return MongoClients.create (mongoClientSettings); }}
Vegye figyelembe, hogy regisztrálnunk kell MongoTransactionManager konfigurációnkban engedélyezzük a natív MongoDB tranzakciókat, mivel azok alapértelmezés szerint le vannak tiltva.
5. Szinkron tranzakciók
Miután befejeztük a konfigurációt, csak a natív MongoDB tranzakciók használatához kell tennünk jelölje meg módszerünket azzal @ Tranzakció.
Az annotált módszeren belül mindent egy tranzakcióval hajtanak végre:
@Test @Transactional public void whenPerformMongoTransaction_thenSuccess () {userRepository.save (new User ("John", 30)); userRepository.save (új felhasználó ("Ringo", 35)); Lekérdezés = új Lekérdezés (). AddCriteria (Criteria.where ("név"). Is ("John")); Felhasználók listája = mongoTemplate.find (lekérdezés, Felhasználó.osztály); assertThat (users.size (), az (1)); }
Vegye figyelembe, hogy nem tudjuk használni listCollections parancs egy több dokumentumot tartalmazó tranzakción belül - például:
@Test (várható = MongoTransactionException.class) @Transactional public void whenListCollectionDuringMongoTransaction_thenException () {if (mongoTemplate.collectionExists (User.class)) {mongoTemplate.save (új felhasználó ("John", 30)); mongoTemplate.save (új felhasználó ("Ringo", 35)); }}
Ez a példa a MongoTransactionException ahogy használtuk a collectionExists () módszer.
6. TransactionTemplate
Láttuk, hogy a Spring Data miként támogatja az új MongoDB natív tranzakciókat. Ezenkívül a Spring Data a nem natív lehetőséget is biztosítja.
Nem natív tranzakciókat hajthatunk végre a Spring Data segítségével TransactionTemplate:
@Test public void givenTransactionTemplate_whenPerformTransaction_thenSuccess () {mongoTemplate.setSessionSynchronization (SessionSynchronization.ALWAYS); TransactionTemplateactionTemplate = új TransactionTemplate (mongoTransactionManager); actionTemplate.execute (new TransactionCallbackWithoutResult () {@Orride protected void doInTransactionWithoutResult (TransactionStatus status) {mongoTemplate.insert (new User ("Kim", 20)); mongoTemplate.insert (new User ("Jack", 45));} ;}); Lekérdezés = új lekérdezés (). AddCriteria (Criteria.where ("név"). Is ("Jack")); Felhasználók listája = mongoTemplate.find (lekérdezés, Felhasználó.osztály); assertThat (users.size (), az (1)); }
Be kell állítanunk SessionSynchronization nak nek MINDIG nem natív Spring Data tranzakciók használatához.
7. Reaktív tranzakciók
Végül megnézzük Spring Data támogatás a MongoDB reaktív tranzakciókhoz.
Hozzá kell adnunk még néhány függőséget a pom.xml reaktív MongoDB-vel dolgozni:
org.mongodb mongodb-driver-reactivestreams 4.1.0 org.mongodb mongodb-driver-sync 4.0.5 io.projectreactor reaktor-teszt 3.2.0.KÖZLÍTÉSI teszt
A mongodb-driver-reaktiv streamek, a mongodb-driver-sync és a reaktor-teszt függőségek a Maven Centralon érhetők el.
És természetesen konfigurálnunk kell a Reaktív MongoDB-t:
@Configuration @EnableReactiveMongoRepositories (basePackages = "com.baeldung.reactive.repository") public class MongoReactiveConfig extends AbstractReactiveMongoConfiguration {@Override public MongoClient reactiveMongoCreate () {return Mumbo } @Orride védett karakterlánc getDatabaseName () {return "reaktív"; }}
A reaktív MongoDB-ben történő tranzakciók használatához a inTransaction () módszer ben ReactiveMongoOperations:
@Autowired private ReactiveMongoOperations reactiveOps; @Test public void whenPerformTransaction_thenSuccess () {User user1 = new User ("Jane", 23); User2 = új felhasználó ("John", 34); reaktívOps.inTransaction () .execute (action -> action.insert (user1) .then (action.insert (user2))); }
További információ a Spring Data reaktív adattárairól itt érhető el.
8. Következtetés
Ebben az írásban megtanultuk a natív és nem natív MongoDB tranzakciók használatát a Spring Data segítségével.
A példák teljes forráskódja elérhető a GitHub oldalon.