Ответ 1
Добавьте в application.properties строку: spring.data.mongodb.database = yourdb
Это сработало для меня, может быть, слишком поздно для вас, но это может помочь кому-то искать ту же проблему. подробнее здесь!
Я использую Mongo repositories для выполнения операций CRUD, как в приведенном ниже коде. Хотя этот код работает, но документы и коллекции создаются в другой БД, чем тот, который я хочу. Как я могу явно указать имя базы данных, в которое будут храниться документы.
Класс POJO:
@Document(collection = "actors")
public class Actor
{
@Id
private String id;
...
//constructor
//setters & getters
}
Репозиторий:
public interface ActorRepository extends MongoRepository<Actor, String>
{
public Actor findByFNameAndLName(String fName, String lName);
public Actor findByFName (String fName);
public Actor findByLName(String lName);
}
Служба, использующая репозиторий:
@Service
public class ActorService
{
@Autowired
private ActorRepository actorRepository;
public Actor insert(Actor a)
{
a.setId(null);
return actorRepository.save(a);
}
}
И я получаю доступ к службе из класса контроллера 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();
}
...
}
Я создал этот класс конфигурации spring mongoDB, который имеет возможность устанавливать имя базы данных, но не мог понять, как использовать его с репозиториями выше.
@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());
}
}
Добавьте в application.properties строку: spring.data.mongodb.database = yourdb
Это сработало для меня, может быть, слишком поздно для вас, но это может помочь кому-то искать ту же проблему. подробнее здесь!
FWIW, я могу изменить имя базы данных манго, используя комбинацию кода Sezin Karli и Sam выше, несмотря на то, что решение не работает в ситуации Сэма.
В моем файле POM содержится только эта ссылка на mongodb:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
В частности, сначала я создал файл beans.xml в ресурсах со следующей информацией:
<?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>
Затем я изменил свой файл, чтобы загрузить конфигурацию с помощью:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Примечание. Это должно выполняться сначала в main().
Наконец, я добавил extends AbstractMongoConfiguration
в свой начальный класс и реализовал
@Override
public String getDatabaseName() {
return "myDBName";
}
@Override
@Bean
public Mongo mongo() throws Exception {
return new MongoClient("localhost" , 27017 );
}
Имя базы данных было указано в двух местах. К сожалению, это кажется необходимым для успеха.
Ваша конфигурация кажется прекрасной Сэмом. Вы уверены, что есть db под названием "MyDB"? Или вы уверены, что вы также не устанавливаете имя db в другом месте (например, контекст xml приложения), как показано ниже.
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="demo"/>
</bean>