SpringBootで複数のMongoDBデータソースを構成する

SpringBootに複数のデータソースを実装する手順は次のとおりです。

1.application.propertiesファイルの下の構成情報は次のとおりです。

ここに画像の説明を挿入

#数据源1
spring.data.mongodb.manag.database=management
spring.data.mongodb.manag.host=192.168.11.234
spring.data.mongodb.manag.port=27017
spring.data.mongodb.manag.password=lisi-123321
spring.data.mongodb.manag.username=lisi

#数据源2
spring.data.mongodb.krdcz.database=db_cloud_device
spring.data.mongodb.krdcz.host=192.168.11.234
spring.data.mongodb.krdcz.port=27017
spring.data.mongodb.krdcz.password=lisi-123321
spring.data.mongodb.krdcz.username=lisi

2. MongoConfig構成クラスを作成します。注:1つはデフォルトのデータソースである必要があり、@ Primaryアノテーションでマークされています。

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.util.StringUtils;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ReadPreference;
import com.mongodb.ServerAddress;

@Configuration
@PropertySource("classpath:application.properties")//application.properties配置文件路径
public class MongoConfig {
    
    

	@Value(value = "${spring.data.mongodb.manag.host}")
	private String host;

	@Value(value = "${spring.data.mongodb.manag.port}")
	private Integer port;

	// db_auth
	@Value(value = "${spring.data.mongodb.manag.database}")
	private String authDatabase;

	@Value(value = "${spring.data.mongodb.manag.username}")
	private String authUsername;

	@Value(value = "${spring.data.mongodb.manag.password}")
	private String authPassword;
	

	@Primary
	@Bean
	@Value("mongoTemplate")//这个是默认数据源,这里的名字和后面注入的变量名要一致
	public MongoTemplate mongoTemplate() throws Exception {
    
    
		MongoDbFactory authFactory = mongoFactory(host, port, authUsername, authPassword, authDatabase);
		MappingMongoConverter mappingMongoConverter = mappingMongoConverter(authFactory);
		MongoTemplate mongoTemplate = new MongoTemplate(authFactory, mappingMongoConverter);
		ReadPreference preference = ReadPreference.secondary();
		mongoTemplate.setReadPreference(preference);
		return mongoTemplate;
	}

	@Primary
	@Bean
	public MongoDbFactory mongoFactory(String host, Integer port, String username, String password, String database)
			throws Exception {
    
    

		if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
    
    
			return new SimpleMongoDbFactory(new MongoClient(host, port), database);
		}

		MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
		builder.threadsAllowedToBlockForConnectionMultiplier(10);
		MongoClientOptions mongoClientOptions = builder.build();
		ServerAddress serverAddress = new ServerAddress(host, port);
		List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();

		
		credentialsList.add(MongoCredential.createScramSha1Credential(username, database, password.toCharArray()));
		return new SimpleMongoDbFactory(new MongoClient(serverAddress, credentialsList, mongoClientOptions), database);

	}

	@Primary
	@Bean
	public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory) {
    
    
		DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
		MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext());
		mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
		return mappingConverter;
	}
	//下面是开始配置第二个数据源,如果想继续添加第三个数据源,就再复制一遍下面的代码修改一下参数
	@Value(value = "${spring.data.mongodb.krdcz.host}")
	private String accountHost;

	@Value(value = "${spring.data.mongodb.krdcz.port}")
	private Integer accountPort;

	@Value(value = "${spring.data.mongodb.krdcz.database}")
	private String accountDatabase;

	@Value(value = "${spring.data.mongodb.krdcz.username}")
	private String accountUsername;

	@Value(value = "${spring.data.mongodb.krdcz.password}")
	private String accountPassword;

	@Qualifier
	@Bean
	@Value("kdmongoTemplate")//这个是第二个数据源,这里的名字和后面注入的变量名要一致
	public MongoTemplate accountMongoTemplate() throws Exception {
    
    
		MongoDbFactory authFactory = accountMongoFactory(accountHost, accountPort, accountUsername, accountPassword, accountDatabase);
		MappingMongoConverter mappingMongoConverter = mappingMongoConverter(authFactory);	
		MongoTemplate mongoTemplate = new MongoTemplate(authFactory, mappingMongoConverter);
		ReadPreference preference = ReadPreference.secondary();
		mongoTemplate.setReadPreference(preference);
		return mongoTemplate;
	}

	@Qualifier
	@Bean
	public MongoDbFactory accountMongoFactory(String host, Integer port, String username, String password, String database)
			throws Exception {
    
    
		  if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
    
     
			  return new SimpleMongoDbFactory(new MongoClient(host, port), database); 
		  }
		  
		  MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
		  builder.threadsAllowedToBlockForConnectionMultiplier(10);
		  MongoClientOptions mongoClientOptions = builder.build();
		  ServerAddress serverAddress = new ServerAddress(host, port);
		  List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
		 
		  credentialsList.add(MongoCredential.createScramSha1Credential(username,
		  database, password.toCharArray())); 
		  return new SimpleMongoDbFactory(new MongoClient(serverAddress, credentialsList,mongoClientOptions),database);
	}

}

3.データソースをビジネスコードに挿入します

	@Autowired
	private MongoTemplate mongoTemplate;//默认数据源,这里的变量名要和上面配置数据源时的变量名一致

	@Qualifier
	@Autowired
	private MongoTemplate kdmongoTemplate;//第二个数据源,这里的变量名要和上面配置数据源时的变量名一致

設定が完了しました。

おすすめ

転載: blog.csdn.net/qq_41936224/article/details/109360484