多資料來源MongoDB的使用(法二:lombok+MongoDbFactory+MongoProperties+註解).md
阿新 • • 發佈:2018-12-06
- pom包的設定:新增lombok和spring-boot-autoconfigure包引用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>RELEASE</version> </dependency>
- 配置檔案使用YAML的形式新增兩條資料來源,如下:
mongodb:
primary:
host: 192.168.9.60
port: 20000
database: test
secondary:
host: 192.168.9.60
port: 20000
database: test1
本mongodb環境沒有設定許可權認證。
- 配置兩個庫的資料來源(包括MongoDbFactory和MongoTemplate的配置)
載入資料來源配置物件MultipleMongoProperties
@Data
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
private MongoProperties primary = new MongoProperties();
private MongoProperties secondary = new MongoProperties();
}
配置不同包路徑下使用不同的資料來源
第一個庫的封裝
@Configuration @EnableMongoRepositories(basePackages = "com.neo.model.repository.primary", mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE) public class PrimaryMongoConfig { protected static final String MONGO_TEMPLATE = "primaryMongoTemplate"; }
第二個庫的封裝
@Configuration
@EnableMongoRepositories(basePackages = "com.neo.model.repository.secondary",
mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}
讀取對應的配置資訊並且構造對應的MongoTemplate(建立各資料來源的MongoTemplate)
/**
* 獲取各資料來源MongoTemplate
*
*/
@Configuration
public class MultipleMongoConfig {
@Autowired
private MultipleMongoProperties mongoProperties;
@Primary
@Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate primaryMongoTemplate() throws Exception {
return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
}
@Bean
@Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
}
@Bean
@Primary
public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
}
@Bean
public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
mongo.getDatabase());
}
}
本例項mongodb環境沒有設定許可權認證的,可以簡單的通過newSimpleMongoDbFactory(newMongoClient(host, port), database)實現對MongoDbFactory的建立。
- 建立兩個庫分別對應的物件和Repository
藉助lombok來構建物件
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "first_mongo")
public class PrimaryMongoObject {
@Id
private String id;
private String value;
@Override
public String toString() {
return "PrimaryMongoObject{" + "id='" + id + '\'' + ", value='" + value + '\''
+ '}';
}
}
對應的Repository
public interface PrimaryRepository extends MongoRepository<PrimaryMongoObject, String> {
}
public interface SecondaryRepository extends MongoRepository<SecondaryMongoObject, String> {
}
繼承了 MongoRepository會預設實現很多基本的增刪改查,省了很多自己寫dao層的程式碼。
- 實現service層的開發