具有SpringBoot REST api的多个MongoDB连接器

具有SpringBoot REST api的多个MongoDB连接器,mongodb,spring-boot,spring-data-mongodb,Mongodb,Spring Boot,Spring Data Mongodb,我有三个数据库,我使用MongoTemplate从我的应用程序连接到这些数据库。 但当我在Postman中使用例如POST方法时,出现了错误404,not found。 在控制台中,一切正常,当我尝试时,也出现了此错误,出现了意外错误(type=notfound,status=404)。 没有可用的消息。 我搜索了太多,读了太多的东西,比如,但是我无法理解如何定义多个MongoDB连接器并解决这个问题 MultipleMongoConfige: package spring.mongo.

我有三个数据库,我使用MongoTemplate从我的应用程序连接到这些数据库。 但当我在Postman中使用例如POST方法时,出现了错误404,not found。 在控制台中,一切正常,当我尝试时,也出现了此错误,出现了意外错误(type=notfound,status=404)。 没有可用的消息。 我搜索了太多,读了太多的东西,比如,但是我无法理解如何定义多个MongoDB连接器并解决这个问题

MultipleMongoConfige:

    package spring.mongo.thesis.config;

import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

import com.mongodb.MongoClient;

import lombok.RequiredArgsConstructor;

@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(MultipleMongoProperties.class)
public class MultipleMongoConfig {
    private final MultipleMongoProperties mongoProperties = new MultipleMongoProperties();
    @Primary
    @Bean(name = "primaryMongoTemplate")
    public MongoTemplate primaryMongoTemplate() throws Exception {
        return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
    }
    @Bean(name = "secondaryMongoTemplate")
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
    }
    @Bean(name = "thirdMongoTemplate")
    public MongoTemplate thirdMongoTemplate() throws Exception {
        return new MongoTemplate(thirdFactory(this.mongoProperties.getThird()));
    }
    @Bean
    @Primary
    public MongoDbFactory primaryFactory(final MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
    @Bean
    public MongoDbFactory secondaryFactory(final MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
    @Bean
    public MongoDbFactory thirdFactory(final MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }


}
PrimaryMongoConfig:

    package spring.mongo.thesis.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

@Configuration
@EnableMongoRepositories(basePackages = "spring.mongo.thesis.repository.primary",
mongoTemplateRef = "primaryMongoTemplate")
public class PrimaryMongoConfig {

}
The MultipleMongoProperty:

    package spring.mongo.thesis.config;

import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
    private MongoProperties primary = new MongoProperties();
    private MongoProperties secondary = new MongoProperties();
    private MongoProperties third = new MongoProperties();


    public MongoProperties getPrimary() {
        return primary;
    }
    public void setPrimary(MongoProperties primary) {
        this.primary = primary;
    }
    public MongoProperties getSecondary() {
        return secondary;
    }
    public void setSecondary(MongoProperties secondary) {
        this.secondary = secondary;
    }
    public MongoProperties getThird() {
        return third;
    }
    public void setThird(MongoProperties third) {
        this.third = third;
    }



}
    package spring.mongo.thesis.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

@Configuration
@EnableMongoRepositories(basePackages = "spring.mongo.thesis.repository.primary",
mongoTemplateRef = "primaryMongoTemplate")
public class PrimaryMongoConfig {

}
PlayerController:

     package spring.mongo.thesis.controller.primary;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import spring.mongo.thesis.repository.primary.PlayerModel;
import spring.mongo.thesis.repository.primary.PlayerRepository;

@RestController
@RequestMapping("/player")
public class PlayerController {
    @Autowired
    private PlayerRepository repo;

    //Getting Player ID
    @GetMapping("/{nickname}")
    public ResponseEntity<?>  getPlayerByID(@PathVariable String nickname){


        try {

            PlayerModel p = repo.findById(nickname).get();
            return ResponseEntity.ok(p);

        } catch (Exception e) {
            return ResponseEntity.status(404).body("Not Found!");
        }

    }

    //Get All Players
        @GetMapping
        public List<PlayerModel> getAllPlayers() {
            return repo.findAll();

        }   

    //Delete Players
    @DeleteMapping
    public String deleteAllPlayers(){
        repo.deleteAll();
        return "Deleted!";      
    }




    //@ExceptionHandler(MethodArgumentNotValidException.class)
    //public void handleMissingParams(MissingServletRequestParameterException ex) {
      //  String name = ex.getParameterName();
        //System.out.println(name + " parameter is missing");
        // Actual exception handling
    //}


    //Create Player
    @PostMapping
    public ResponseEntity<?> createPlayer(@RequestBody @Valid PlayerModel player) {
        PlayerModel findplayer = repo.findByNickname(player.getNickname());
        if(findplayer != null) {
            return ResponseEntity.status(409).body("Conflict!");
        }

            repo.save(player);
            return ResponseEntity.status(201).body("Created!");         

    }



    //Delete player By ID
    @DeleteMapping("/{nickname}")
    public ResponseEntity<?> deletePlayerByID(@PathVariable String nickname){
        try {

            PlayerModel p = repo.findById(nickname).get();
            repo.deleteById(nickname);
            return ResponseEntity.ok(p);

        } catch (Exception e) {
            return ResponseEntity.status(404).body("Not Found!");
        }
    }

    //Update Player By ID
    @PutMapping("/{nickname}")
    public ResponseEntity<?> updatePlayerByID(
            @PathVariable("nickname")String nickname,
            @RequestBody @Valid PlayerModel player){
        PlayerModel findplayer = repo.findByNickname(player.getNickname());
        if(findplayer == null)
            return ResponseEntity.status(404).
                    body("There is not Player with indicated Nickname!");
        else
            player.setNickname(nickname);
            repo.save(player);
            return ResponseEntity.ok(player);

    }

}
以及我的申请:

    package spring.mongo.thesis.application;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        System.out.println("Hello World!");

    }

}
玩家等级:

    package spring.mongo.thesis.repository.primary;

import javax.validation.constraints.NotBlank;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "player")
public class PlayerModel {
    @Id
    @NotBlank
    private String nickname;
    @NotBlank
    private String firstname;
    @NotBlank
    private String lastname;
    @NotBlank
    private String email;

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "PlayerModel [nickname=" + nickname + ", firstname=" + firstname + ", lastname=" + lastname + ", email="
                + email + "]";
    }


}
application.yml:

       spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
mongodb:
  primary:
    host: localhost
    port: 27017
    database: player-db
  secondary:
    host: localhost
    port: 27017
    database: game-db
  third:
    host: localhost
    port: 27017
    database: score-db

你有多个存储库类吗?所有这些都在不同的包中吗?是的,我有ScoreRepository、GameRepository、PlayerRepository。它们在不同的包中你尝试的api url是什么。。Normalyy未找到404当请求在Postman中找不到任何匹配的urllocalhost:8080/player和POST methodid时发生。您了解我的问题吗?@pvpkiran@varmando您有多个存储库类吗?所有这些都在不同的包中吗?是的,我有ScoreRepository、GameRepository、PlayerRepository。它们在不同的包中你尝试的api url是什么。。当请求在Postman中找不到任何匹配的urllocalhost:8080/player和POST methodid时,会发生Normalyy Not found 404。您了解我的问题吗?@pvpkiran@varman
       spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
mongodb:
  primary:
    host: localhost
    port: 27017
    database: player-db
  secondary:
    host: localhost
    port: 27017
    database: game-db
  third:
    host: localhost
    port: 27017
    database: score-db