2014-09-09 22 views
10

Tôi đang sử dụng kho lưu trữ Mongo để thực hiện các thao tác CRUD như trong mã bên dưới. Mặc dù mã này hoạt động, nhưng các tài liệu và các bộ sưu tập được tạo trong một DB khác với cái mà tôi muốn. Làm cách nào tôi có thể chỉ định rõ ràng tên DB cho các tài liệu sẽ được lưu trữ.cách chỉ định tên cơ sở dữ liệu trong dữ liệu mùa xuân mongoDB

Lớp POJO:

@Document(collection = "actors") 
public class Actor 
{ 
    @Id 
    private String id; 
    ... 
    //constructor 
    //setters & getters 
} 

Các kho:

public interface ActorRepository extends MongoRepository<Actor, String> 
{ 
    public Actor findByFNameAndLName(String fName, String lName); 
    public Actor findByFName (String fName); 
    public Actor findByLName(String lName); 
} 

Các dịch vụ có sử dụng kho:

@Service 
public class ActorService 
{ 
    @Autowired 
    private ActorRepository actorRepository; 

    public Actor insert(Actor a) 
    { 
    a.setId(null); 
    return actorRepository.save(a); 
    } 
} 

Và tôi truy cập vào dịch vụ từ một lớp điều khiển REST:

@RestController 
public class Controllers 
{ 

    private static final Logger logger = Logger.getLogger(Controllers.class); 
    private static final ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); 

    @Autowire 
    private ActorService actorService; 

    @RequestMapping(value="/createActor", method=RequestMethod.POST) 
    public @ResponseBody String createActor(@RequestParam(value = "fName") String fName, 
     @RequestParam(value = "lName") String lName, 
     @RequestParam(value = "role") String role) 
    { 
    return actorService.insert(new Actor(null,fName,lName,role)).toString(); 

    } 

... 
} 

Tôi đã tạo lớp cấu hình mongoDB mùa xuân này có tùy chọn thiết lập tên DB, nhưng không thể tìm ra cách sử dụng nó với các kho lưu trữ ở trên.

@Configuration 
public class SpringMongoConfig extends AbstractMongoConfiguration 
{ 
    @Bean 
    public GridFsTemplate gridFsTemplate() throws Exception 
    { 
     return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter()); 
    } 

    @Override 
    protected String getDatabaseName() 
    { 
     return "MyDB"; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception 
    { 
     return new MongoClient("localhost" , 27017); 
    } 

    public @Bean MongoTemplate mongoTemplate() throws Exception 
    { 
     return new MongoTemplate(mongo(), getDatabaseName()); 
    }  
} 
+0

Bạn đã tìm thấy câu trả lời? Đã mắc kẹt với cùng một vấn đề sau khi làm theo hướng dẫn này: https://spring.io/guides/gs/accessing-mongodb-data-rest/ – Mussa

+0

Thật không may, không. – Sami

Trả lời

1

Cấu hình của bạn có vẻ ổn. Bạn có chắc là có một db được gọi là "MyDB" không? Hoặc bạn chắc chắn rằng bạn cũng không đặt tên db ở một nơi khác (chẳng hạn như ngữ cảnh ứng dụng xml) như dưới đây.

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg name="mongo" ref="mongo"/> 
    <constructor-arg name="databaseName" value="demo"/> 
    </bean> 
+0

có DB và tôi không sử dụng bất kỳ cấu hình nào khác, tuy nhiên câu hỏi của bạn khiến tôi nhận ra rằng đó là GridFsStore nên nó chỉ có hai bộ sưu tập (khối và tệp). Bạn không chắc chắn liệu có thể sử dụng nó cho các bộ sưu tập khác không? – Sami

+0

Thay đổi DB sang một số khác (không phải GridFs) cũng không hoạt động. Ngay cả khi tôi thả DB, nó tạo ra một DB mới gọi là kiểm tra và lưu trữ các tài liệu ở đó. – Sami

+0

Nếu bạn chắc chắn rằng không có tham chiếu db thử nghiệm trong dự án của bạn, có thể bạn có thể thử một cấu hình mongo mùa xuân khác mà bạn sẽ tìm thấy bằng cách googling. Xin lỗi tôi không thể giúp thêm –

2

FWIW, tôi có thể thay đổi tên cơ sở dữ liệu mongo bằng cách kết hợp mã Sezin Karli và Sam ở trên, mặc dù giải pháp không hoạt động trong tình huống của Sam.

tập tin POM của tôi chỉ chứa thông tin này để MongoDB:

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
    </dependency> 

Cụ thể, đầu tiên tôi tạo ra một tập tin beans.xml tài nguyên với các thông tin sau:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
     xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <mongo:mongo-client credentials="user:[email protected]" /> 

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <constructor-arg name="mongo" ref="mongo"/> 
     <constructor-arg name="databaseName" value="myDBName"/> 
    </bean> 
</beans> 

Tiếp theo, tôi đã thay đổi của tôi chính để tải cấu hình qua:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 

Lưu ý: Điều này phải thực thi đầu tiên trong main().

Cuối cùng, tôi đã thêm extends AbstractMongoConfiguration để khởi động lớp học của tôi và thực hiện

@Override 
    public String getDatabaseName() { 
     return "myDBName"; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient("localhost" , 27017); 
    } 

Tên cơ sở dữ liệu được quy định tại hai địa điểm. Thật không may, điều này xuất hiện cần thiết để thành công.

14

Thêm vào application.properties một dòng: spring.data.mongodb.database = yourdb

Đó làm việc cho tôi, có lẽ đã quá muộn cho bạn, nhưng điều này có thể giúp ai đó tìm kiếm cùng một vấn đề. xem các thuộc tính khác here!

Các vấn đề liên quan