是的,您可以在單彈簧引導應用程序中配置2個數據庫。 您必須在單個application.yml文件中添加兩個數據庫屬性。
#application.yml
spring:
data:
mongodb:
database: database_one
uri: mongodb://root:[email protected]:27017/database_one
# username : root, Password : root
secondary:
mongodb:
database: database_two
uri: mongodb://root:[email protected]:27017/database_two
# username : root, Password : password
然後,您必須爲spring添加兩個數據庫配置文件,並在每個文件中讀取這兩個屬性。對於第一個數據庫配置文件,只需爲主數據庫屬性添加@Primary註釋。 您可以根據您的要求單獨合併這兩個文件。
@Configuration
public class DatabaseConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseConfiguration.class);
@Value("${spring.data.mongodb.uri}")
private String mongoUri;
@Value("${spring.data.mongodb.database}")
private String mongoDbName;
@Primary
@Bean
public MongoTemplate mongoTemplate() {
LOGGER.debug(" Instantiating MongoDbFactory ");
SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient(), mongoDbName);
return new MongoTemplate(mongoDbFactory);
}
@Primary
@Bean
public MongoClient mongoClient() {
return new MongoClient(mongoClientURI());
}
@Primary
@Bean
public MongoClientURI mongoClientURI() {
LOGGER.debug(" creating connection with mongodb with uri [{}] ", mongoUri);
return new MongoClientURI(mongoUri);
}
}
# Second database configuration file.
@Configuration
public class SecondaryDatabaseConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(SecondaryDatabaseConfiguration.class);
@Value("${secondary.mongodb.uri}")
private String mongoUri;
@Value("${secondary.mongodb.database}")
private String mongoDbName ;
@Bean(name = "mongoTemplateSecond")
public MongoTemplate mongoTemplateSecondary() {
LOGGER.debug(" Instantiating MongoDbFactory ");
SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClientSecondary(), mongoDbName);
return new MongoTemplate(mongoDbFactory);
}
@Bean
public MongoClient mongoClientSecondary() {
return new MongoClient(mongoClientURISecondary());
}
@Bean
public MongoClientURI mongoClientURISecondary() {
LOGGER.debug(" creating connection with mongodb with uri [{}] ", mongoUri);
return new MongoClientURI(mongoUri);
}
}
然後使用@Qualifier註解的實現類,並通過bean的名字,如果你想從輔助數據庫讀取和主數據庫就可以直接自動裝配。
@Qualifier註解用於區分相同類型的bean。
@Component
public class RepositoryImpl{
@Qualifier(value = "mongoTemplateSecond")
@Autowired
MongoTemplate mongoTemplateSecond; // for secondary database
@Autowired
private MongoTemplate mongoTemplate; // for primary database
public List<BasicDBObject> findRecordsInSecondary(Query query){
List<BasicDBObject> basicDBObjects = mongoTemplateSecond.find(query, BasicDBObject.class, YOUR_COLLECTION_NAME);
return basicDBObjects;
}
public List<BasicDBObject> findRecordsInPrimary(Query query){
List<BasicDBObject> basicDBObjects = mongoTemplate.find(query, BasicDBObject.class, YOUR_COLLECTION_NAME);
return basicDBObjects;
}
}
你可以使用Spring配置文件來看看文檔https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html – Automator1992