笔记系列之docker安装Mongo DB

笔记系列之docker安装Mongo DB,第1张

笔记系列之docker安装Mongo DB

文章目录
    • 1.目标
    • 2.环境准备
    • 3. 安装Mongo DB
      • 3.1 下载Mongo DB镜像
      • 3.2 运行容器
      • 3.3 配置
      • 3.4 使用
      • 3.5 配置远程 *** 作
    • 4.Spring data *** 作Mongo DB实例
    • 4.1 Pom.xml
      • 4.2 entity实体类
      • 4.3 repository
      • 4.4 service
      • 4.5 web
      • 4.6 启动入口
      • 4.7 application.properties
      • 4.9 测试
    • 5.挖坑

1.目标
  • 1 使用docker安装Mongo DB;
  • 2 远程连接数据库,即可以通过Robo 3T或者DG等工具连接;
  • 3 通过Spring boot程序读写数据库中内容。
2.环境准备
  • 1 docker
  • 2 Mongo镜像
  • 3 IDEA
  • 4 JAVA 11
3. 安装Mongo DB 3.1 下载Mongo DB镜像
docker pull mongo:latest

可以使用docker images查看下载好的镜像

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mongo        latest    40d4435de119   4 weeks ago   701MB
3.2 运行容器
docker run -itd --name mongo -p 27017:27017 mongo --auth

其中

  • p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。
  • auth:需要密码才能访问容器服务。
    此时可以查看容器运行情况:
~ docker ps -a
ConTAINER ID   IMAGE          COMMAND                  CREATED      STATUS         PORTS                      NAMES
165d0cb0abd0   mongo:latest   "docker-entrypoint.s…"   2 days ago   Up 3 seconds   0.0.0.0:27017->27017/tcp   mongo
3.3 配置

进入mongo这个容器之中

$ docker exec -it mongo mongo admin

创建一个名为 admin,密码为 123456 的用户。

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

尝试使用上面创建的用户信息进行连接。

db.auth('admin', '123456')
3.4 使用

尝试通过命令后进入mongo

➜  ~ docker exec -it mongo /bin/bash
root@165d0cb0abd0:/# mongo admin
MongoDB shell version v5.0.4
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ea6eb8f4-e2a0-4ce8-b5dd-ca43302cc614") }
MongoDB server version: 5.0.4
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
> show dbs
>

可以看到,我们在没有输入密码的情况下,我们无法通过命令看到所拥有的库。

> show dbs
> db.auth("admin","123456")
1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
yytest  0.000GB

通过了权限校验之后,就可以对数据库进行 *** 作了。

3.5 配置远程 *** 作

这个时候,如果使用Robo 3T工具连接数据库,出现了连接不上的情况,是配置文件没有将bindIp: 127.0.0.1改掉,这样是只能本机登录的。

#进入容器
docker exec -it  mongodb  /bin/bash
#更新源 
apt-get update  
# 安装 
apt-get install vim 
# 修改 mongo 配置文件  
vim /etc/mongod.conf.orig

将其中的bindIp: 127.0.0.1注释掉# bindIp: 127.0.0.1
或者改成bindIp: 0.0.0.0
这个时候保存重启就可以远程连接了。

4.Spring data *** 作Mongo DB实例

借助IDE A创建一个Spring boot项目,这里我选择了Kotlin,看看这个糖到底有多甜。

4.1 Pom.xml

主要是添加了spring-boot-starter-data-mongodb依赖



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.5.6
		 
	
	com.example
	wu
	0.0.1-SNAPSHOT
	wu
	wu
	
		11
		1.5.31
	
	
		
			org.springframework.boot
			spring-boot-starter-data-mongodb
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			com.fasterxml.jackson.module
			jackson-module-kotlin
		
		
			org.jetbrains.kotlin
			kotlin-reflect
		
		
			org.jetbrains.kotlin
			kotlin-stdlib-jdk8
		

		
			org.projectlombok
			lombok
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		${project.basedir}/src/main/kotlin
		${project.basedir}/src/test/kotlin
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					
						
							org.projectlombok
							lombok
						
					
				
			
			
				org.jetbrains.kotlin
				kotlin-maven-plugin
				
					
						-Xjsr305=strict
					
					
						spring
					
				
				
					
						org.jetbrains.kotlin
						kotlin-maven-allopen
						${kotlin.version}
					
				
			
		
	

4.2 entity实体类
package com.example.wu.entity

import lombok.Data
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.document

@Data
@document("books")
data class Book(
    @Id
    val id: String,
    val name:String,
    val edition: Int
)

@document(“books”)注解表明,这个实体对应的mongo db中名为books的collection。

4.3 repository
package com.example.wu.dao

import com.example.wu.entity.Book
import org.springframework.data.mongodb.repository.MongoRepository

interface BookRepository: MongoRepository {
    fun findByName(name: String): Book
}

这里只需要继承接口,就可以使用框架提供的各种方法了。注意方法名命名规范即可。

4.4 service
package com.example.wu.service

import com.example.wu.entity.Book

interface BookService {
    fun findByName(bookName: String) : Book
}
package com.example.wu.service.impl

import com.example.wu.dao.BookRepository
import com.example.wu.entity.Book
import com.example.wu.service.BookService
import org.springframework.stereotype.Service

@Service
class BookServiceImpl(
    private val bookRepository: BookRepository
) : BookService {
    override fun findByName(name: String): Book {
        return bookRepository.findByName(name)
    }

}
4.5 web
package com.example.wu.web

import com.example.wu.entity.Book
import com.example.wu.service.BookService
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
import javax.websocket.server.PathParam

@RestController
class BookController(
    private val bookService: BookService) {

    @GetMapping("/book")
    fun getBookByName(name: String): ResponseEntity {
        var book = bookService.findByName(name)
        return ResponseEntity.ok(book)
    }
}
4.6 启动入口
package com.example.wu

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class WuApplication

fun main(args: Array) {
	runApplication(*args)
}

4.7 application.properties
server.port=10098

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=yytest
spring.data.mongodb.username=admin
spring.data.mongodb.password=123456
4.9 测试

这个时候就可以启动,并且进行测试存取数据了。

5.挖坑

原理还没有解析,先挖坑。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5673077.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存