我正在使用Mongo存储库来执行CRUD操作,如下面的代码所示。尽管此代码有效,但文档和集合是在与我想要的DB不同的DB中创建的。如何显式指定要存储文档的数据库名称。
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配置类,它可以选择设置DB名称,但无法弄清楚如何将它与上面的存储库一起使用。
@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 :(得分:23)
在application.properties中添加一行
spring.data.mongodb.database=your_db_name
这对我有用,对你来说可能为时已晚,但这可以帮助有人寻找同样的问题。 查看更多属性here!
答案 1 :(得分:2)
FWIW,我能够使用上面的Sezin Karli和Sam的代码组合来更改mongo数据库名称,尽管解决方案在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:password@database" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="myDBName"/>
</bean>
</beans>
接下来,我通过以下方式更改了main来加载配置:
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 );
}
数据库名称在两个位置指定。不幸的是,这似乎是成功的必要条件。
答案 2 :(得分:1)
你的配置似乎很好Sam。你确定有一个名为“MyDB”的数据库吗? 或者你确定你没有在其他地方设置数据库名称(例如app context xml),如下所示。
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="demo"/>
</bean>
答案 3 :(得分:1)
对于 Spring-Boot :
您可以依赖自动配置,然后键入application.properties文件:
spring.data.mongodb.database=your_db_name
或者如果您不想依靠Spring-boot自动配置,则可以简单地进行以下操作:
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());
}
}
如果您想走这条路-我建议您查看一下Spring Boot的条件评估报告(https://www.baeldung.com/spring-boot-auto-configuration-report)并进行调整。希望这会有所帮助。