Spring Boot集成MongoDB

一、Spring Boot集成MongoDB多數據源

在Spring Boot中集成MongoDB多數據源需要配置多個MongoTemplate和多個MongoDbFactory。創建一個@Configuration類來定義數據源的連接。

@Configuration
@EnableMongoRepositories(basePackages = "com.example.demo.mongodb.ds1", mongoTemplateRef = "ds1MongoTemplate")
public class DS1MongoDBConfig {
    
    @Primary
    @Bean(name = "ds1MongoTemplate")
    public MongoTemplate ds1MongoTemplate() {
        MongoDbFactory mongoDbFactory = new SimpleMongoClientDbFactory(new MongoClientURI("mongodb://ds1-url"));
        return new MongoTemplate(mongoDbFactory);
    }
}

這裡我們使用了@EnableMongoRepositories來啟用MongoDB的repositories。同時需要指定basePackages和mongoTemplateRef。在這個@Configuration配置類中,我們只需要配置MongoTemplate的實例。

接着在另一個@Configuration類中配置第二個MongoDB數據源:

@Configuration
@EnableMongoRepositories(basePackages = "com.example.demo.mongodb.ds2", mongoTemplateRef = "ds2MongoTemplate")
public class DS2MongoDBConfig {
    
    @Bean(name = "ds2MongoDbFactory")
    public MongoDbFactory ds2MongoDbFactory() {
        MongoCredential credential = MongoCredential.createCredential("username", "database", "password".toCharArray());
        MongoClientOptions options = MongoClientOptions.builder()
                .threadsAllowedToBlockForConnectionMultiplier(4)
                .connectTimeout(10000)
                .maxPoolSize(40)
                .build();
        return new SimpleMongoDbFactory(new MongoClient(new ServerAddress("ds2-url"), credential, options), "database");
    }
    
    @Bean(name = "ds2MongoTemplate")
    public MongoTemplate ds2MongoTemplate() {
        return new MongoTemplate(ds2MongoDbFactory());
    }
}

同樣的,我們需要啟用MongoDB的repositories,並指定basePackages和mongoTemplateRef。這個@Configuration配置類中需要配置兩個bean,一個是MongoDbFactory,另一個是MongoTemplate的實例。

二、Spring Boot集成MongoDB啟動很慢

在Spring Boot中集成MongoDB時,有可能會出現啟動非常慢的情況。這是因為MongoDB的Java驅動庫會自動掃描類路徑下的所有類,這個操作會導致啟動時間變慢。為了解決這個問題,可以在pom.xml文件中將MongoDB的Java驅動庫進行排除。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
        </exclusion>
    </exclusions>
</dependency>
 
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.0</version>
</dependency>

在這個例子中,我們排除了spring-boot-starter-data-mongodb依賴下的mongo-java-driver的依賴。接着我們添加了版本號為3.4.0的mongo-java-driver的依賴。

三、Spring Boot集成MongoDB啟動不了

在Spring Boot集成MongoDB啟動不了時,我們可以查看控制台的錯誤信息找到問題所在。通常,啟動MongoDB時需要知道MongoDB的地址和端口號。如果MongoDB的地址或者端口號不正確,那麼啟動時就會出現問題。

Spring Boot的MongoDB默認地址是localhost:27017,如果啟動的時候沒有其他配置的話,可以嘗試將MongoDB的地址設置為localhost:27017。

四、Spring Boot集成MongoDB手寫連接

在使用Spring Boot集成MongoDB的過程中,我們也可以手寫連接MongoDB。首先創建一個MongoDB的連接管理類,比如MongoDBUtil。

public class MongoDBUtil {
    private static MongoClient mongoClient;
    
    public static synchronized MongoClient getMongoClient() {
        if (mongoClient != null) {
            return mongoClient;
        }
        MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017");
        mongoClient = new MongoClient(uri);
        return mongoClient;
    }
    
    public static void closeMongoClient() {
        if (mongoClient != null) {
            try {
                mongoClient.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}

接着在其他的類中使用MongoDBUtil來獲取MongoDB的連接。

MongoClient mongoClient = MongoDBUtil.getMongoClient();
MongoDatabase database = mongoClient.getDatabase("database");
MongoCollection collection = database.getCollection("collection");

五、Spring Boot集成MongoDB集群

在Spring Boot中集成MongoDB集群需要指定MongoClientOptions的參數。比如,下面的例子設置了MongoClientOptions的connectTimeout和maxPoolSize參數。

@Bean
public MongoClient mongoClient() {
    MongoClientOptions options = MongoClientOptions.builder()
            .connectTimeout(10000)
            .maxPoolSize(40)
            .build();
    List<ServerAddress> seeds = new ArrayList<>();
    seeds.add(new ServerAddress("host1", 27017));
    seeds.add(new ServerAddress("host2", 27017));
    seeds.add(new ServerAddress("host3", 27017));
    return new MongoClient(seeds, options);
}

這個例子中,我們使用了MongoClientOptions來配置MongoDB的連接選項。在MongoClientOptions中配置了connectTimeout和maxPoolSize。我們還需要提供MongoDB的地址列表,這裡使用了一個List來存儲。

六、Spring Boot集成MVC

在Spring Boot中集成MVC需要在pom.xml文件中添加spring-boot-starter-web依賴。在代碼中可以看到使用@RestController註解和@RequestMapping註解來聲明一個rest接口。

@RestController
public class UserController {
    
    @Autowired
    private UserRepository userRepository;
    
    @RequestMapping("/users")
    public List<User> getUsers() {
        return userRepository.findAll();
    }
}

這個例子中,我們使用了@Autowired註解來注入UserRepository。接着使用@RequestMapping註解來定義了一個API接口,返回所有的用戶列表。

七、Spring Boot集成AOP

在Spring Boot中集成AOP需要定義切面類和切點類。

@Aspect
@Component
public class LogAspect {

    @Pointcut("execution(* com.example.demo.service.UserService.*(..))")
    public void serviceLogPointcut() {}

    @Before("serviceLogPointcut()")
    public void logBeforeService(JoinPoint joinPoint) {
        Logger logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass());
        logger.info("Before Service...");
    }
}

這個例子中,我們使用了@Aspect和@Component註解來定義了一個切面。並定義了一個切點方法serviceLogPointcut。在切面中使用了@Before註解,並指定了切點方法serviceLogPointcut。

八、Spring Boot集成OSS

在Spring Boot中集成OSS需要引入阿里巴巴的OSS SDK,可以通過在pom.xml文件中添加dependency來實現。

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.2.0</version>
</dependency>

接着,我們需要創建一個OSS的配置文件來配置我們的OSS連接信息。

@Configuration
public class OSSConfig {

    @Value("${oss.endpoint}")
    private String endpoint;
    
    @Value("${oss.accessKeyId}")
    private String accessKeyId;
    
    @Value("${oss.accessKeySecret}")
    private String accessKeySecret;
    
    @Value("${oss.bucketName}")
    private String bucketName;

    @Bean
    public OSSClient ossClient() {
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }
}

在這個例子中,我們使用了@Configuration註解來定義了一個OSS配置類。在這個配置類中,我們使用了@Value註解來獲取我們定義的OSS連接信息。並在@Bean註解下創建了一個OSSClient實例。

九、Spring Boot集成MongoDB

在Spring Boot中集成MongoDB還需要創建實體類和Repository類。比如,在下面的例子中,我們創建了一個User實體類和UserRepository類。

@Document(collection = "user")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    private String id;
    
    private String username;
    
    private String password;
}

這個例子中,我們使用了@Document註解來定義MongoDB的文檔類型和文檔所在的集合名稱。接着聲明了User實體類的字段和構造方法。

public interface UserRepository extends MongoRepository<User, String> {}

public class UserService {
    
    @Autowired
    private UserRepository userRepository;
    
    public List<User> findAll() {
        return userRepository.findAll();
    }
    
    public void save(User user) {
        userRepository.save(user);
    }
}

這個例子中,我們創建了一個UserRepository接口,並繼承了MongoRepository。在UserService中使用@Autowired註解注入了UserRepository實例,並定義了一些常用的方法。比如findAll和save方法來獲取和保存User實體。

原創文章,作者:RPXDR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371059.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RPXDR的頭像RPXDR
上一篇 2025-04-23 00:48
下一篇 2025-04-23 00:48

相關推薦

發表回復

登錄後才能評論