I am using Mongo repositories to perform CRUD operations as in the code below. Although this code works, but the documents and collections are created in a different DB than the one that I want. How can I explicitly specify a DB name to which documents will be stored.
The POJO class:
@Document(collection = "actors") public class Actor { @Id private String id; ... //constructor //setters & getters }
The repository:
public interface ActorRepository extends MongoRepository<Actor, String> { public Actor findByFNameAndLName(String fName, String lName); public Actor findByFName (String fName); public Actor findByLName(String lName); }
The service that uses the repository:
@Service public class ActorService { @Autowired private ActorRepository actorRepository; public Actor insert(Actor a) { a.setId(null); return actorRepository.save(a); } }
And I access the service from a REST controller class:
@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(); } ... }
I have created this spring mongoDB configuration class which has the option of setting DB name, but could not figure out how to use it with the repositories above.
@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()); } }
Add to the application.properties a line
spring.data.mongodb.database=your_db_name
That worked for me, maybe too late for you but this could help someone looking for the same problem. see more properties here!
For Spring-Boot:
You can either rely on autoconfiguration and then type in your application.properties file:
spring.data.mongodb.database=your_db_name
or if you don't want to rely on Spring-boot autoconfiguration you can simply:
import com.mongodb.MongoClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; /** * MonfoConfig */ @Configuration public class MongoConfig { @Bean public MongoDbFactory mongoDbFactory() { MongoClient mongoClient = new MongoClient("127.0.0.1:27017"); return new SimpleMongoDbFactory(mongoClient, "databasenamehere" ); } @Bean public MongoTemplate mongoTemplate() { return new MongoTemplate(mongoDbFactory()); } }
If you want to follow that path - I suggest having a look into into Spring Boot's Conditions Evaluation Report (https://www.baeldung.com/spring-boot-auto-configuration-report) and tweaking what you need to tweak. Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With