1:配置
data:
mongodb:
primary:
uri: mongodb://user:secret@host:port/db?authSource=dbuser
secondary:
uri: mongodb://user:secret@host:port/db?authSource=dbuser
2:beanconfig
public abstract class AbstractMongoConfig {
private String uri; // mongodb 地址
/**
* 获取MongoTemplate
* @return
* @throws Exception
*/
public abstract MongoTemplate getMongoTemplate() throws Exception;
/**
* 创建mongodb工厂
* @return
* @throws Exception
*/
public MongoDbFactory mongoDbFactory() throws Exception
{
MongoClientURI mongoClientURI = new MongoClientURI(uri);
return new SimpleMongoDbFactory(mongoClientURI);
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
}
主库
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.primary")
public class PrimaryMongoConfig extends AbstractMongoConfig {
@Primary //在使用@Autowired注入的时候,如果不特殊指明(特殊指明请用@Qualifier的讲解),那么默认就注入被@Primary标记的类
@Override
@Bean(name = "primaryMongoTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
副库
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.secondary")
public class SecondaryMongoConfig extends AbstractMongoConfig {
@Override
@Bean(name = "secondaryMongoTemplate")
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
入口需要跳过自动配置
@SpringBootApplication(exclude= {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
使用
service
public interface PositionService {
public List<Position> findPage(QueryRequest request, Pageable pageable);
public long findCount(QueryRequest request);
public Position findById(String id);
}
public class PositionServiceImpl implements PositionService {
@Autowired
@Qualifier(value = "secondaryMongoTemplate")
private MongoTemplate secondaryMongoTemplate;
@Override
public List<Position> findPage(QueryRequest request, Pageable pageable) {
Query query = new Query();
return secondaryMongoTemplate.find(query.with(pageable), Position.class);
}
@Override
public long findCount(QueryRequest request) {
Query query = new Query();
return secondaryMongoTemplate.count(query, Position.class);
}
@Override
public Position findById(String id) {
return secondaryMongoTemplate.findById(id, Position.class);
}
}