Linux下安装mongodb并整合springboot
一、安装环境
CentOS7+MongoDB4.0.12正式版
[root@wzxm72ns bin]~ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
以下是mongodb和可视化工具的安装包(包含4和5两个版本)
链接:https://pan.baidu.com/s/1MfxmoRQMTWgzxk80q_oYYQ
提取码:1um0
二、安装mongodb
1.通过xFtp将mongdb的压缩包上传至指定目录下:
[root@wzxm72ns root]~ cd /opt #进入根目录下的opt文件夹
[root@wzxm72ns opt]~ mkdir mongodb #创建mongodb文件夹
[root@wzxm72ns opt]~ tar -zxvf mongodb-linux-x86_64-rhel62-4.0.2.tgz #解压
2.创建mongodb数据文件、日志文件和配置文件
[root@wzxm72ns opt]~ mkdir /usr/local/mongodb
[root@wzxm72ns opt]~ mv mongodb-linux-x86_64-rhel62-4.0.2 /usr/local/mongodb/mongodb #移动到刚刚创建的mongodb文件夹下并修改解压后的文件名为mongodb
[root@wzxm72ns opt]~ cd /usr/local/mongodb/
[root@wzxm72ns mongodb]~ mkdir conf
[root@wzxm72ns mongodb]~ mkdir data
[root@wzxm72ns mongodb]~ mkdir logs
[root@wzxm72ns mongodb]~ cd ./conf
[root@wzxm72ns conf]~ touch mongodb.conf #创建配置文件
[root@wzxm72ns conf]~ cd ..
[root@wzxm72ns mongodb]~ cd ./logs
[root@wzxm72ns logs]~ touch mongodb.log #创建日志文件
3.编辑配置文件
[root@wzxm72ns logs]~ cd /usr/local/mongodb/conf
[root@wzxm72ns conf]~ vi mongodb.conf #进入编辑模式
点击a或i进入编辑模式,将以下内容复制进命令行中
#数据存放地址
dbpath = /usr/local/mongodb/data
#log存放地址
logpath = /usr/local/mongodb/logs/mongodb.log
#端口号
port = 27017
#外部所有ip都能访问
bind_ip = 0.0.0.0
#以守护程序运行,即后台运行
fork = true
#开启用户认证,设置访问用户和密码需要另外操作
#auth=true
#关闭http接口,默认关闭http端口访问
#nohttpinterface = true
按esc退出编辑模式,然后输入 :wq 保存并退出
4.启动mongodb服务
[root@wzxm72ns conf]~ cd /usr/local/mongodb/mongodb/bin #进入bin目录
[root@wzxm72ns bin ]~ ./mongod --config /usr/local/mongodb/conf/mongodb.conf #输入启动命令
输入以下命令查看服务是否启动成功
[root@wzxm72ns bin ]~ netstat -lanp | grep "27017"
显示如下进程,说明服务启动成功
5.在linux上操作mongodb数据库
[root@wzxm72ns bin ]~ cd /usr/local/mongodb/mongodb/bin #进入到mongodb的bin目录
[root@wzxm72ns bin ]~ ./mongo
> use admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]}) #添加用户
6.使用可视化工具studio 3T连接mongodb
7.关闭mongodb服务
> use admin
> db.shutdownServer()
此时使用studio 3T已经无法连接到mongodb服务
二、springboot整合mongodb方式一(快速配置)
新建一个maven项目,在pom文件中添加如下依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>module1</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mongodbDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mongodbDemo</name>
<description>mongodbDemo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新建application.properties文件
spring.data.mongodb.host=#你的服务器地址
spring.data.mongodb.port=#mongodb服务的端口号,一般都为27017
创建实体类
package mongodbdemo.mongodbTest.model;
public class MongoTest {
private Integer id;
private Integer age;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
创建dao类
package mongodbdemo.mongodbTest.dao;
import mongodbdemo.mongodbTest.model.MongoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
@Component
public class MongoTestDao {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 创建对象
*/
public void saveTest(MongoTest test) {
mongoTemplate.save(test);
}
/**
* 根据用户名查询对象
* @return
*/
public MongoTest findTestByName(String name) {
Query query=new Query(Criteria.where("name").is(name));
MongoTest mgt = mongoTemplate.findOne(query , MongoTest.class);
return mgt;
}
/**
* 更新对象
*/
public void updateTest(MongoTest test) {
Query query=new Query(Criteria.where("id").is(test.getId()));
Update update= new Update().set("age", test.getAge()).set("name", test.getName());
//更新查询返回结果集的第一条
mongoTemplate.updateFirst(query,update,MongoTest.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,TestEntity.class);
}
/**
* 删除对象
* @param id
*/
public void deleteTestById(Integer id) {
Query query=new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,MongoTest.class);
}
}
创建controller类
package mongodbdemo.mongodbTest.controller;
import mongodbdemo.mongodbTest.dao.MongoTestDao;
import mongodbdemo.mongodbTest.model.MongoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MongoTestController {
@Autowired
private MongoTestDao mtdao;
@GetMapping(value = "/test1")
public void saveTest() throws Exception {
MongoTest mgtest = new MongoTest();
mgtest.setId(11);
mgtest.setAge(33);
mgtest.setName("ceshi");
mtdao.saveTest(mgtest);
}
@GetMapping(value = "/test2")
public MongoTest findTestByName() {
MongoTest mgtest = mtdao.findTestByName("ceshi");
System.out.println("mgtest is " + mgtest);
return mgtest;
}
@GetMapping(value = "/test3")
public void updateTest() {
MongoTest mgtest = new MongoTest();
mgtest.setId(11);
mgtest.setAge(44);
mgtest.setName("ceshi2");
mtdao.updateTest(mgtest);
}
@GetMapping(value = "/test4")
public void deleteTestById() {
mtdao.deleteTestById(11);
}
}
启动项目后从浏览器输入地址即可测试接口
三、springboot整合mongodb方式二(自定义配置)
新建一个maven项目,在pom文件中添加如下依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>module1</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mongodbDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mongodbDemo</name>
<description>mongodbDemo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml文件中添加如下配置
spring:
data:
mongodb:
host: #你的服务器地址
port: #mongodb服务的端口号,一般都为27017
database: #数据库名,不配置默认为test
创建配置类MongoConfig
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
@Configuration
public class MongoConfig {
@Value("${spring.data.mongodb.host}")
private String host;
@Value("${spring.data.mongodb.port}")
private int port;
@Value("${spring.data.mongodb.database}")
private String database;
@Bean
public MongoTemplate myCongoTemplate() {
ServerAddress serverAddress = new ServerAddress(host, port);
//用户名、密码 登录验证
// MongoCredential mongoCredential = MongoCredential.createCredential("username",
// "databaseName", "password".toCharArray());
// List<MongoCredential> credentials = new ArrayList<>();
// credentials.add(mongoCredential);
// MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
// MongoClientOptions mongoClientOptions = builder.build();
MongoClient mongoClient = new MongoClient(serverAddress);
SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
return mongoTemplate;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
}
创建工具类MongodbUtils
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
@Component
public class MongodbUtils {
public static MongodbUtils mongodbUtils;
@PostConstruct
public void init() {
mongodbUtils = this;
mongodbUtils.mongoTemplate = this.mongoTemplate;
}
@Autowired
private MongoTemplate mongoTemplate;
/**
* 保存数据对象,集合为数据对象中@Document 注解所配置的collection
*
* @param obj
* 数据对象
*/
public static void save(Object obj) {
mongodbUtils.mongoTemplate.save(obj);
}
/**
* 指定集合保存数据对象
*
* @param obj
* 数据对象
* @param collectionName
* 集合名
*/
public static void save(Object obj, String collectionName) {
mongodbUtils.mongoTemplate.save(obj, collectionName);
}
/**
* 根据数据对象中的id删除数据,集合为数据对象中@Document 注解所配置的collection
*
* @param obj
* 数据对象
*/
public static void remove(Object obj) {
mongodbUtils.mongoTemplate.remove(obj);
}
/**
* 指定集合 根据数据对象中的id删除数据
*
* @param obj
* 数据对象
* @param collectionName
* 集合名
*/
public static void remove(Object obj, String collectionName) {
mongodbUtils.mongoTemplate.remove(obj, collectionName);
}
/**
* 根据key,value到指定集合删除数据
*
* @param key
* 键
* @param value
* 值
* @param collectionName
* 集合名
*/
public static void removeById(String key, Object value, String collectionName) {
Criteria criteria = Criteria.where(key).is(value);
criteria.and(key).is(value);
Query query = Query.query(criteria);
mongodbUtils.mongoTemplate.remove(query, collectionName);
}
/**
* 指定集合 修改数据,且仅修改找到的第一条数据
*
* @param accordingKey
* 修改条件 key
* @param accordingValue
* 修改条件 value
* @param updateKeys
* 修改内容 key数组
* @param updateValues
* 修改内容 value数组
* @param collectionName
* 集合名
*/
public static void updateFirst(String accordingKey, Object accordingValue, String[] updateKeys, Object[] updateValues,
String collectionName) {
Criteria criteria = Criteria.where(accordingKey).is(accordingValue);
Query query = Query.query(criteria);
Update update = new Update();
for (int i = 0; i < updateKeys.length; i++) {
update.set(updateKeys[i], updateValues[i]);
}
mongodbUtils.mongoTemplate.updateFirst(query, update, collectionName);
}
/**
* 指定集合 修改数据,且修改所找到的所有数据
*
* @param accordingKey
* 修改条件 key
* @param accordingValue
* 修改条件 value
* @param updateKeys
* 修改内容 key数组
* @param updateValues
* 修改内容 value数组
* @param collectionName
* 集合名
*/
public static void updateMulti(String accordingKey, Object accordingValue, String[] updateKeys, Object[] updateValues,
String collectionName) {
Criteria criteria = Criteria.where(accordingKey).is(accordingValue);
Query query = Query.query(criteria);
Update update = new Update();
for (int i = 0; i < updateKeys.length; i++) {
update.set(updateKeys[i], updateValues[i]);
}
mongodbUtils.mongoTemplate.updateMulti(query, update, collectionName);
}
/**
* 根据条件查询出所有结果集 集合为数据对象中@Document 注解所配置的collection
*
* @param obj
* 数据对象
* @param findKeys
* 查询条件 key
* @param findValues
* 查询条件 value
* @return
*/
public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues) {
Criteria criteria = null;
for (int i = 0; i < findKeys.length; i++) {
if (i == 0) {
criteria = Criteria.where(findKeys[i]).is(findValues[i]);
} else {
criteria.and(findKeys[i]).is(findValues[i]);
}
}
Query query = Query.query(criteria);
List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass());
return resultList;
}
/**
* 指定集合 根据条件查询出所有结果集
*
* @param obj
* 数据对象
* @param findKeys
* 查询条件 key
* @param findValues
* 查询条件 value
* @param collectionName
* 集合名
* @return
*/
public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues, String collectionName) {
Criteria criteria = null;
for (int i = 0; i < findKeys.length; i++) {
if (i == 0) {
criteria = Criteria.where(findKeys[i]).is(findValues[i]);
} else {
criteria.and(findKeys[i]).is(findValues[i]);
}
}
Query query = Query.query(criteria);
List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass(), collectionName);
return resultList;
}
/**
* 指定集合 根据条件查询出所有结果集 并排倒序
*
* @param obj
* 数据对象
* @param findKeys
* 查询条件 key
* @param findValues
* 查询条件 value
* @param collectionName
* 集合名
* @param sort
* 排序字段
* @return
*/
public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues, String collectionName ,String sort) {
Criteria criteria = null;
for (int i = 0; i < findKeys.length; i++) {
if (i == 0) {
criteria = Criteria.where(findKeys[i]).is(findValues[i]);
} else {
criteria.and(findKeys[i]).is(findValues[i]);
}
}
Query query = Query.query(criteria);
query.with(Sort.by(Sort.Direction.DESC, sort));
List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass(), collectionName);
return resultList;
}
/**
* 根据条件查询出符合的第一条数据 集合为数据对象中 @Document 注解所配置的collection
*
* @param obj
* 数据对象
* @param findKeys
* 查询条件 key
* @param findValues
* 查询条件 value
* @return
*/
public static Object findOne(Object obj, String[] findKeys, Object[] findValues) {
Criteria criteria = null;
for (int i = 0; i < findKeys.length; i++) {
if (i == 0) {
criteria = Criteria.where(findKeys[i]).is(findValues[i]);
} else {
criteria.and(findKeys[i]).is(findValues[i]);
}
}
Query query = Query.query(criteria);
Object resultObj = mongodbUtils.mongoTemplate.findOne(query, obj.getClass());
return resultObj;
}
/**
* 指定集合 根据条件查询出符合的第一条数据
*
* @param obj
* 数据对象
* @param findKeys
* 查询条件 key
* @param findValues
* 查询条件 value
* @param collectionName
* 集合名
* @return
*/
public static Object findOne(Object obj, String[] findKeys, Object[] findValues, String collectionName) {
Criteria criteria = null;
for (int i = 0; i < findKeys.length; i++) {
if (i == 0) {
criteria = Criteria.where(findKeys[i]).is(findValues[i]);
} else {
criteria.and(findKeys[i]).is(findValues[i]);
}
}
Query query = Query.query(criteria);
Object resultObj = mongodbUtils.mongoTemplate.findOne(query, obj.getClass(), collectionName);
return resultObj;
}
/**
* 查询出所有结果集 集合为数据对象中 @Document 注解所配置的collection
*
* @param obj
* 数据对象
* @return
*/
public static List<? extends Object> findAll(Object obj) {
List<? extends Object> resultList = mongodbUtils.mongoTemplate.findAll(obj.getClass());
return resultList;
}
/**
* 查询出所有结果集 集合为数据对象中 @Document 注解所配置的collection
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> findAll(Class<T> clazz){
List<T> resultList = mongodbUtils.mongoTemplate.findAll(clazz);
return resultList;
}
/**
* 指定集合 查询出所有结果集
*
* @param obj
* 数据对象
* @param collectionName
* 集合名
* @return
*/
public static List<? extends Object> findAll(Object obj, String collectionName) {
List<? extends Object> resultList = mongodbUtils.mongoTemplate.findAll(obj.getClass(), collectionName);
return resultList;
}
/**
* 指定集合 查询出所有结果集
* @param clazz
* @param collectionName
* @param <T>
* @return
*/
public static <T> List<T> findAll(Class<T> clazz, String collectionName) {
List<T> resultList = mongodbUtils.mongoTemplate.findAll(clazz, collectionName);
return resultList;
}
}
创建测试类MongoTest
import org.jeecg.JeecgSystemApplication;
import org.jeecg.modules.mongo.util.MongodbUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)//因为我在项目中配置了websocket,需要添加才能正常启动
public class MongoTest {
@Test
public void testSave() {
Topic topic = new Topic();
topic.setName("从器件角度看,计算机经历了五代变化。但从系统结构看,至今绝大多数计算机仍属于( )计算机。");
topic.setType(1);
topic.setSubject(1266661195234037761L);
Map<Integer, String> select = new HashMap<>(16);
select.put(0, "并行");
select.put(1, "冯诺依曼");
select.put(2, "智能");
select.put(3, "串行");
topic.setSelect(select);
topic.setAnswer(1);
topic.setCreated(new Date());
topic.setDeleted(false);
topic.setNote("计算机组成原理");
MongodbUtils.save(topic);
}
@Test
public void testFind() {
List<Topic> all = MongodbUtils.findAll(Topic.class);
all.forEach(System.out::println);
}
@Test
public void testDelKey() {
MongodbUtils.removeByKey("_id","22","tb_topic");
}
}