今天用 Spring Boot 做个小 demo 程序,本来轻车熟路,结果怎么都访问不了,后来浪费半天时间才发现是因为手滑把端口设置成了 6666, 而 6666 刚好在 Chrome 浏览器的默认非安全端口列表里。。。
避免采坑更多默认非安全端口,请搜索:默认非安全端口列表
今天用 Spring Boot 做个小 demo 程序,本来轻车熟路,结果怎么都访问不了,后来浪费半天时间才发现是因为手滑把端口设置成了 6666, 而 6666 刚好在 Chrome 浏览器的默认非安全端口列表里。。。
避免采坑更多默认非安全端口,请搜索:默认非安全端口列表
1 | @Configuration |
参考:
RabbitMQ 是使用 Erlang 开发的,所以需要首先安装 Erlang,本文安装其最新版本
添加 repo 文件:
1 | sudo vim /etc/yum.repos.d/rabbitmq_erlang.repo |
文件内容:
1 | [rabbitmq_erlang] |
安装:
1 | sudo yum -y install erlang socat |
下载 RPM 包:
1 | wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.17/rabbitmq-server-3.7.17-1.el7.noarch.rpm |
导入 GPG key:
1 | sudo rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
安装 RabbitMQ:
1 | sudo rpm -Uvh rabbitmq-server-3.7.17-1.el7.noarch.rpm |
启动 RabbitMQ:
1 | sudo systemctl start rabbitmq-server |
查看 RabbitMQ 运行状态
1 | sudo systemctl status rabbitmq-server |
将 RabbitMQ 加入开机自启动:
1 | sudo systemctl enable rabbitmq-server |
放行端口:
1 | sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp |
启用 RabbitMQ 网页管理插件
1 | sudo rabbitmq-plugins enable rabbitmq_management |
创建管理员用户并授权:
1 | sudo rabbitmqctl add_user admin 你的密码 |
在浏览器访问 http://IP:15672 即可进入到 RabbitMQ 网页管理页面
参考:
本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12)
使用 root 操作 (实际操作中使用非 root 账户启动报错)
| 服务器 102 | 服务器 103 | 服务器 104 |
|---|---|---|
| mongos | mongos | mongos |
| config server | config server | config server |
| shard server 1 主节点 | shard server 1 副节点 | shard server 1 仲裁 |
| shard server 2 仲裁 | shard server2 主节点 | shard server 2 副节点 |
| shard server 3 副节点 | shard server 3 仲裁 | shard server 3 主节点 |
端口:
1 | mongos:20000 |
在 3 台服务器分别操作
1 | cd /usr/local |
1 | mkdir -p /usr/local/mongodb/conf |
1 | vim /etc/profile |
在文件末尾添加:
1 | export MONGODB_HOME=/usr/local/mongodb |
使配置立即生效:
1 | source /etc/profile |
在 3 台服务器分别操作
1 | vim /usr/local/mongodb/conf/config.conf |
内容:
1 | # where to write logging data. |
启动服务:
1 | mongod -f /usr/local/mongodb/conf/config.conf |
以下操作在任意一台服务器操作即可
1 | mongo --port 21000 |
1 | # config 变量 |
在 3 台服务器分别操作
1 | vim /usr/local/mongodb/conf/shard1.conf |
内容:
1 | # where to write logging data. |
启动服务:
1 | mongod -f /usr/local/mongodb/conf/shard1.conf |
以下操作在任意一台服务器操作即可 (实际操作中需要在非裁判服务器操作)
1 | mongo --port 27001 |
1 | use admin |
重复上述操作配置 shard2 和 shard3, 注意修改名称、端口和对应的 arbiterOnly
在 3 台服务器分别操作
1 | vim /usr/local/mongodb/conf/mongos.conf |
内容:
1 | # where to write logging data. |
启动服务:
1 | mongos -f /usr/local/mongodb/conf/mongos.conf |
以下操作在任意一台服务器操作即可
1 | mongo --port 20000 |
1 | use admin |
在其中一台 mongos 继续操作:
1 | # 指定 test 数据库分片生效 |
在其中一台 mongos 继续操作:
1 | # 创建账户 |
Spring Boot 连接字符串:
1 | spring: |
参考:
业务需求及设计见前文:基于 MongoDB 动态字段设计的探索
1 | public Object avg(String major){ |
1 | public Object sum(String name){ |
完整代码:GitHub
假设某学校课程系统,不同专业课程不同 (可以动态增删),但是需要根据专业不同显示该专业学生的各科课程的成绩,如下:
| 专业 | 姓名 | 高等数学 | 数据结构 |
|---|---|---|---|
| 计算机 | 张三 | 90 | 85 |
| 计算机 | 李四 | 78 | 87 |
| 专业 | 姓名 | 高等数学 |
|---|---|---|
| 数学 | 王五 | 86 |
| 数学 | 赵六 | 95 |
开始的思路是根据配置的课程动态生成文档字段,使用非映射方式直接操作 MongoCollection, 有以下问题:
所以最终使用内嵌数组的方式
1 | public class Student { |
1 | public class MajorConfig { |
初始化数据 (createTime 在 MongoDB 存储为 ISODate):
1 | [ |
首先查询到对应的数据,然后根据配置的课程动态添加字段:
1 | public Object list(String major){ |
各专业学生各科分数数据:
1 | [ |
1 | [ |
ReflectUtil 代码:
1 | public class ReflectUtil { |
DynamicBean 代码:
1 | public class DynamicBean { |
1 | public Object add(String major, String name, Boolean updateDatabase){ |
为数学专业添加计算机基础:
1 | [ |
1 | public Object del(String major, String name, Boolean updateDatabase){ |
把高等数学从计算机专业删除:
1 | [ |
1 | public Object update(String name, String courseName, Float score){ |
完整代码:GitHub
本文分别使用 MongoRepository 和 MongoTemplate 实现 MongoDB 的简单的增删改查
本文使用 docker 安装 MongoDB:
application.yml:
1 | spring: |
entity:
1 | public class User { |
service:
1 | public interface UserService { |
1 | public interface UserMongoRepository extends MongoRepository<User, String> { |
1 | @Profile("MongoRepository") |
1 | @Profile("MongoTemplate") |
完整代码:GitHub
MongoRepository 中 deleteById 和 MongoTemplate 中 deleteById, deleteAll 未生效,暂不知原因
本文使用 Sharding-JDBC 实现读写分离,基于 CentOS 7 + MySQL 5.7
依次执行命令:
1 | sudo wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm |
启动:
1 | sudo systemctl start mysqld |
查看默认密码:
1 | grep "password" /var/log/mysqld.log |
进入数据库:
1 | mysql -uroot -p |
修改密码:
1 | alter user 'root'@'localhost' identified by 'NEW PASSWORD'; |
远程访问:
1 | use mysql; |
本文一主 (192.168.30.101) 两从 (192.168.30.102, 192.168.30.103)
1 | sudo vim /etc/my.cnf |
1 | # server-id 给数据库服务的唯一标识 |
重启数据库,执行 SQL:
1 | grant replication slave on *.* to 'root'@'192.168.30.102' identified by 'YOUR PASSWORD'; |
重启数据库,执行 SQL:
1 | show master status; |
记录下 File 和 Position
以 192.168.30.102 为例:
1 | log-bin=mysql-bin |
重启数据库,执行 SQL:
1 | stop slave; |
其中 master_log_file 和 master_log_pos 分别为上步记录主库的 File 和 Position
1 | <dependency> |
1 | spring: |
完整代码:GitHub
参考:
本文分别使用 Elasticsearch Repository 和 ElasticsearchTemplate 实现 Elasticsearch 的简单的增删改查
Elastic Stack 是 ELK Stack 在 5.0 版本加入 Beats 套件后的新称呼
截至目前,spring-data-elasticsearch 支持的 ElasticSearch 的版本为 6.2
本文使用 docker 安装:
1 | sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4 |
开发者模式运行:
1 | sudo docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.2.4 |
application.yml:
1 | spring: |
entity:
1 | @Document(indexName = "user") |
service:
1 | public interface UserService { |
1 | @Repository |
1 | @Profile("ElasticsearchRepository") |
1 | @Profile("ElasticsearchTemplate") |
完整代码:GitHub
实体类中有 LocalDate 类型时报错:failed to map source
参考:
展览的构思源自大英博物馆与英国广播公司空前成功的广播节目,以大英博物馆藏的 100 组物品娓娓道来横跨二百万年的人类故事。有别于以往以文化区域阐述人类历史的方式,展览以独特的角度回顾人类发展的轨迹,探索人类共通的故事。即使身处不同的文化环境,人类在权力、信仰、艺术、贸易及科技等方面都有着相同的渴求及发展脉络,从而引领观众在全球化的视野下,对自己身处的世界有新的认识。

尼斯柏能纳的外棺 (公元前 800 年)

卡尔帕索斯仕女 (公元前 4500 - 3200 年) 这个有点抽象。。。

埃及化妆调色盘 (公元前 4000 - 3600 年) 有种莫名的喜感

拉美西斯二世像 (公元前 1280 年)


乌尔军旗 (约公元前 2500 年)

阿马拉瓦蒂大佛塔雕刻 (公元 200 – 240 年)

密特拉神像 (公元 100 - 200 年)

阿拉伯铜手 (公元 100 – 300 年)

犍陀罗佛陀坐像 (公元 100 - 300 年)

萨珊国王狩猎图银盘 (公元 309 – 379 年)

莫切武士壶 (公元 100 - 700 年)

东方三王圣物柜 (公元 1200 – 1230年)

印加黄金羊驼 (公元 1400 – 1550 年)
湿婆与帕尔瓦蒂雕像 (公元 900 – 1000 年)

路易斯岛棋子(约公元 1150 – 1175 年)

希伯来星盘 (公元 1345 – 1355 年)

贝宁铜板 (公元 1500 – 1600 年)

神奈川冲~浪里 (公元 1831 年)

阿富汗战争地毡 (公元 1979 – 1985 年)

母亲 (公元 2011 年)
然后,后来不知怎么就有种看表情包的心情。。。

“闹钟响了,不想起床,要不要再睡一会”

“要矜持,不能笑” 卡花岗岩沙伯提俑 (公元前 644 年)

“傲娇,谁还不是小公举咋地”

“来~给大爷笑一个”

左:“好想卖萌,耶!”
右:“左边那逗逼笑得我肚子痛”

“有蚊子,啪”
“矮油,牙痛”
“你居然敢打我,委屈脸”
部分图片来自香港文化博物馆官网
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true