当前位置: 代码迷 >> 综合 >> spring boot 2.5 mongo多数据库
  详细解决方案

spring boot 2.5 mongo多数据库

热度:59   发布时间:2023-10-17 15:57:10.0

依赖

compile "org.springframework.boot:spring-boot-starter-data-mongodb"

maven

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

mongo uri使用

mongodb://<username>:<password>@<host>:<port>/<db_name>

application.properties配置

#--- Primary MongoDB ---#
spring.data.mongodb.uri=mongodb://admin:root@127.0.0.1:27017/primary
#--- Secondary MongoDB ---#
mongodb.uri=mongodb://admin:root@127.0.0.1:27017/secondary

bean配置

package com.futve.common.configimport org.springframework.boot.autoconfigure.mongo.MongoProperties
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import org.springframework.data.mongodb.MongoDatabaseFactory
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory@Configuration
open class MultipleMongoConfig {@Primary@Bean(name = ["primaryMongoProperties"])@ConfigurationProperties(prefix = "spring.data.mongodb")open fun getPrimary() : MongoProperties {return MongoProperties()}@Bean(name = ["secondaryMongoProperties"])@ConfigurationProperties(prefix = "mongodb")open fun getSecondary() : MongoProperties {return MongoProperties()}@Primary@Bean(name = ["primaryMongoTemplate"])open fun primaryMongoTemplate() : MongoTemplate {return MongoTemplate(primaryMongoDatabaseFactory(getPrimary()))}@Bean(name = ["secondaryMongoTemplate"])open fun secondaryMongoTemplate() : MongoTemplate {return MongoTemplate(secondaryMongoDatabaseFactory(getSecondary()))}@Primary@Beanopen fun primaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {return SimpleMongoClientDatabaseFactory(mongo.uri)}@Beanopen fun secondaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {return SimpleMongoClientDatabaseFactory(mongo.uri)}
}
package com.futve.common.config;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;@Configuration
public class MultipleMongoConfig2 {@Primary@Bean("primaryMongoProperties")@ConfigurationProperties("spring.data.mongodb")MongoProperties getPrimary() {return new  MongoProperties();} @Bean("secondaryMongoProperties")@ConfigurationProperties("mongodb")MongoProperties getSecondary() {return new  MongoProperties();}@Primary@Bean("primaryMongoTemplate")public MongoTemplate primaryMongoTemplate() {return new MongoTemplate(primaryMongoDatabaseFactory(getPrimary()));}@Bean("secondaryMongoTemplate")public MongoTemplate secondaryMongoTemplate() {return new MongoTemplate(secondaryMongoDatabaseFactory(getSecondary()));}@Primary@Beanpublic MongoDatabaseFactory primaryMongoDatabaseFactory(MongoProperties mongo1) {return new SimpleMongoClientDatabaseFactory(mongo1.getUri());}@Beanpublic MongoDatabaseFactory secondaryMongoDatabaseFactory(MongoProperties mongo2) {return new SimpleMongoClientDatabaseFactory(mongo2.getUri());}
}

启动类配置

@SpringBootApplication(exclude = [MongoAutoConfiguration::class,MongoDataAutoConfiguration::class
])

dao使用

@Repository
class AuthorDao {@Autowired@Qualifier("secondaryMongoTemplate")protected lateinit var secondaryMongoTemplate : MongoTemplatefun findBySurname(surname): List<Author> {val query = Query()query.addCriteria(Criteria.where("surname").`is`(surname))return secondaryMongoTemplate.find(query, Author::class.java)}
}

  相关解决方案