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;//第二个数据源,这里的变量名要和上面配置数据源时的变量名一致
設定が完了しました。