本文共 9691 字,大约阅读时间需要 32 分钟。
全文内容:
Mongodb安装
说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb。
SpringBoot集成MongoDB和Redis
文中还有一个彩蛋Hutool
1.下载最新稳定版
例如我下载的版本是:mongodb-win32-x86_64-enterprise-windows-64-4.2.3-signed.msi
2.安装
选择complete,完整安装(安装全部组件)。complete,完整的、完全的。
默认选项即可:
这里取消勾选:
由于我已经安装好,不能再截图,如果还有不清楚的同学可以看这里:
3.确认Windows服务启动
测试:
4.控制台
安装目录的bin目录,例如C:\Program Files\MongoDB\Server\4.2\bin 。
使用mongo启动客户端
可以查看数据库和添加管理员账户
>show dbs>use admin>db.createUser({user:"admin",pwd:"password",roles:["root"]})>db.auth("admin", "password")
创建一个数据库paopaoedu,
增加一个数据库管理员,用户名密码 paopaoedu//paopaoedu
插入一条数据,查询一条数据
>use paopaoedu>db.createUser({user: "paopaoedu", pwd: "paopaoedu", roles: [{ role: "dbOwner", db: "paopaoedu" }]})>db.auth("paopaoedu", "paopaoedu")>db.paopaoedu.insert({"host":" https://linuxstyle.blog.csdn.net/"})>db.paopaoedu.find()
5.使用图形化客户端
实际开发中一般不会用命令行,这个效率太低了,推荐的客户端是robo3t,注意一定要下1.3.1不要用低版本,不然会报错不能打开数据库列表
robo3t-1.3.1-windows-x86_64-7419c406.exe
错误一:Error: Failed to execute "listdatabases" command
这是因为没有创建超级管理员账户或者数据库管理员账户
错误二:Network error while attempting to run command 'saslStart' on host 'xxx:27017'
这是因为robo3t版本低于1.3.1
6.SpringBoot集成MongoDB和Redis
MongoDB安装好以后是要在实际项目中使用的,现在都是SpringBoot。
SpringBoot集成MongoDB真的已经很简单了。考虑到redis的使用也很简单就一并集成了。
maven:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-starter-data-redis 2.2.4.RELEASE org.springframework.boot spring-boot-starter-data-mongodb cn.hutool hutool-all 5.1.2 com.alibaba fastjson 1.2.62
说明:Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率。hutool-all这个Util的jar非常方便,比如一些时间等常见的都被集成了。
Hutool
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
模块 | 介绍 |
---|---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache | 简单缓存实现 |
hutool-core | 核心,包括Bean操作、日期、各种Util等 |
hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 |
hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa | 基于DFA模型的多关键字查找 |
hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) |
hutool-http | 基于HttpUrlConnection的Http客户端封装 |
hutool-log | 自动识别日志实现的日志门面 |
hutool-script | 脚本执行封装,例如Javascript |
hutool-setting | 功能更强大的Setting配置文件和Properties封装 |
hutool-system | 系统参数调用封装(JVM信息等) |
hutool-json | JSON实现 |
hutool-captcha | 图片验证码实现 |
hutool-poi | 针对POI中Excel的封装 |
hutool-socket | 基于Java的NIO和AIO的Socket封装 |
可以根据需求对每个模块单独引入,也可以通过引入hutool-all
方式引入所有模块。
配置文件:
server.port=8080# Redis数据库索引(默认为0)spring.redis.database=0 # Redis服务器地址spring.redis.host=你的redis主机IP# Redis服务器连接端口spring.redis.port=6379 # Redis服务器连接密码(默认为空)spring.redis.password=#连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接spring.redis.pool.min-idle=0 # 连接超时时间(毫秒)spring.redis.timeout=300## 无密码配置## 如果存在此库就直接连接,如果不存在此库会自动创建#spring.data.mongodb.uri=mongodb://localhost:27017/springboot_mongodb## 有密码配置## name:用户名 / password:密码spring.data.mongodb.uri=mongodb://paopaoedu:paopaoedu@localhost:27017/paopaoedu
model对象:
public class User implements Serializable { private static final long serialVersionUID = -1L; private String username; private String city; private Integer age; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
这里为了简单只是演示就写一起,不分模块了:
@RestControllerpublic class TestController { @Autowired private RedisTemplateredisTemplate; @Autowired private MongoTemplate mongoTemplate; @RequestMapping("/") public String sayHello() { String nowtime= DateUtil.now(); redisTemplate.opsForValue().set("nowtime",nowtime); String rs=redisTemplate.opsForValue().get("nowtime"); User u=new User(); u.setUsername("霞落满天"); u.setCity("银河系"); u.setAge(12); mongoTemplate.insert(u); List ulist=mongoTemplate.findAll(User.class); String json = JSON.toJSONString(ulist); return "HelloWorld SpringBoot "+rs+" "+json; }}
Redis用这个客户端:redis-desktop-manager-0.8.8.384.exe
多数据源的配置
单数据源自动读配置文件,多数据源自然需要你指定数据源,然后使用注解的方式。其实不管是redis还是mongodb还是MYSQL套路都是一样的,就是定义不同数据源,然后定义多个配置工厂的bean,要用的时候注入即可。
Redis多数据源参考:
这个的工程化更好一点,一个数据源一个独立的class比较好
mongodb多数据源参考:
以redis为例,下面是我修改的代码,如果需要可以按需增加连接池配置。
先定义配置文件,假设我们有2个不同的Redis:
# Redis服务器地址spring.redis.master.host=xxx.redis.rds.aliyuncs.com# Redis服务器连接端口spring.redis.master.port=6379# Redis服务器连接密码(默认为空)spring.redis.master.password=xxx# Redis服务器地址spring.redis.follow.host=xxx.redis.rds.aliyuncs.com# Redis服务器连接端口spring.redis.follow.port=6379# Redis服务器连接密码(默认为空)spring.redis.follow.password=xxx
maven增加依赖库:
org.apache.commons commons-pool2
定义数据源配置文件:
@Configurationpublic class RedisConfig { //master @Value("${spring.redis.master.host}") private String masterHost; @Value("${spring.redis.master.port}") private String masterPort; @Value("${spring.redis.master.password}") private String masterPassword; //salve @Value("${spring.redis.follow.host}") private String salveHost; @Value("${spring.redis.follow.port}") private String salvePort; @Value("${spring.redis.follow.password}") private String salvePassword; /** * 配置lettuce连接池 * * @return */ @Bean @ConfigurationProperties(prefix = "spring.redis.lettuce.pool") public GenericObjectPoolConfig redisPool() { return new GenericObjectPoolConfig<>(); } /** * 配置第一个数据源的 * * @return */ @Bean //@ConfigurationProperties(prefix = "spring.redis") public RedisStandaloneConfiguration redisConfig1() { RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration(); rsc.setHostName(masterHost); rsc.setPort(Integer.parseInt(masterPort)); rsc.setPassword(masterPassword); return rsc; } /** * 配置第二个数据源 * * @return */ @Bean //@ConfigurationProperties(prefix = "spring.redis.follow") public RedisStandaloneConfiguration redisConfig2() { RedisStandaloneConfiguration rsc = new RedisStandaloneConfiguration(); rsc.setHostName(salveHost); rsc.setPort(Integer.parseInt(salvePort)); rsc.setPassword(salvePassword); return rsc; } /** * 配置第一个数据源的连接工厂 * 这里注意:需要添加@Primary 指定bean的名称,目的是为了创建两个不同名称的LettuceConnectionFactory * * @param config * @param redisConfig1 * @return */ @Bean("factory1") @Primary public LettuceConnectionFactory factory(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig1) { LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build(); return new LettuceConnectionFactory(redisConfig1, clientConfiguration); } @Bean("factory2") public LettuceConnectionFactory factory2(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig2) { LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build(); return new LettuceConnectionFactory(redisConfig2, clientConfiguration); } /** * 配置第一个数据源的RedisTemplate * 注意:这里指定使用名称=factory 的 RedisConnectionFactory * 并且标识第一个数据源是默认数据源 @Primary * * @param factory1 * @return */ @Bean("redisTemplate1") @Primary public RedisTemplateredisTemplate(@Qualifier("factory1") RedisConnectionFactory factory1) { return getStringStringRedisTemplate(factory1); } /** * 配置第一个数据源的RedisTemplate * 注意:这里指定使用名称=factory2 的 RedisConnectionFactory * * @param factory2 * @return */ @Bean("redisTemplate2") public RedisTemplate redisTemplate2(@Qualifier("factory2") RedisConnectionFactory factory2) { return getStringStringRedisTemplate(factory2); } /** * 设置序列化方式 (这一步不是必须的) * * @param factory2 * @return */ private RedisTemplate getStringStringRedisTemplate(RedisConnectionFactory factory2) { StringRedisTemplate template = new StringRedisTemplate(factory2); template.setKeySerializer(RedisSerializer.string()); template.setValueSerializer(new FastJsonRedisSerializer<>(Object.class)); template.setHashKeySerializer(RedisSerializer.string()); template.setHashValueSerializer(new FastJsonRedisSerializer<>(Object.class)); return template; }
使用非常简单:
@Autowired @Qualifier("redisTemplate1") private RedisTemplate redisTemplate1; @Autowired @Qualifier("redisTemplate2") private RedisTemplate redisTemplate2;
转载地址:https://linuxstyle.blog.csdn.net/article/details/104169160 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!