如何在春季数据 mongoDB 中指定数据库名称

2022-09-01 18:39:55

我正在使用Mongo存储库来执行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();

  }

 ...
}

我已经创建了这个弹簧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());
    }    
}

答案 1

添加到应用程序.属性一行

spring.data.mongodb.database=your_db_name

这对我来说很有效,也许对你来说为时已晚,但这可以帮助寻找相同问题的人。在这里查看更多房产!


答案 2

对于弹簧靴

您可以依赖自动配置,然后键入 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),并调整你需要调整的内容。希望这有帮助。