导航
# 一、下载安装包 官网地址:[MongoDB下载页面](https://www.mongodb.com/try/download/community "MongoDB下载页面") ![MongoDB下载页面](https://www.minedeed.com/content/uploadfile/202112/31871638434584.png "MongoDB下载页面") 方式一:将tgz包下载到本地,然后用XFtp工具上传到服务器; 方式二:拷贝下载链接,直接在服务器上下载,命令如下: ``` wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-5.0.4.tgz ``` # 二、解压文件 命令如下: ``` tar -zxvf mongodb-linux-x86_64-rhel80-5.0.4.tgz -C /usr/local/mongodb ``` 重命名 ``` mv mongodb-linux-x86_64-rhel80-5.0.4 mongodbserver5.0.4 ``` # 三、创建配置文件 1、创建数据和日志文件夹 ``` cd /usr/local/mongodb mkdir data mkdir logs chmod 777 -R data chmod 777 -R logs cd logs touch mongodb.log ``` 2、创建配置文件 ``` cd /usr/local/mongodb mkdir etc cd etc touch mongodb.conf ``` mongodb.conf配置文件内容如下: ``` #数据库路径 dbpath=/usr/local/mongodb/data #日志输出文件路径 logpath=/usr/local/mongodb/logs/mongodb.log #错误日志采用追加模式 logappend=true #启用日志文件,默认启用 journal=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=true #端口号 默认为27017 port=27017 #允许远程访问 bind_ip=0.0.0.0 #开启子进程 fork=true #开启认证,必选先添加用户,先不开启(不用验证账号密码) #auth=true ``` # 四、将MongoDB服务加入环境变量 ``` vi /etc/profile # 最后一行添加 export MONGODB_HOME=/usr/local/mongodb/mongodbserver5.0.4/bin export PATH=$PATH:CONSUL_HOME:MONGODB_HOME # wq!保存退出后,应用下配置文件 export PATH=$PATH: ``` # 五、启动MongoDB服务 ## 1、在MongoDB安装目录的bin文件夹下启动服务: ``` ./mongod --config /usr/local/mongodb/etc/mongodb.conf ``` ![启动MongoDB](https://www.minedeed.com/content/uploadfile/202112/8b821638436639.png "启动MongoDB") ## 2、查看MongoDB服务是否启动成功 ``` netstat -lanp | grep "27017" ``` ![查看MongoDB服务](https://www.minedeed.com/content/uploadfile/202112/421e1638436735.png "查看MongoDB服务") 显示进程,说明已经成功启动。 ## 3、操作MongoDB数据库 ### ①、将mongo路径软链到/usr/bin路径下,方便随处执行mongo命令 ``` ln -s /usr/local/mongodb/mongodbserver5.0.4/bin/mongo /usr/bin/mongo ``` 否则任意路径下执行“mongo”,报如下错误: ``` [root@VM-16-8-centos mongodb]# mongo -bash: mongo: command not found [root@VM-16-8-centos mongodb]# ``` 执行以上命令后,再次执行mongo命令,连接MongoDB服务 ``` [root@VM-16-8-centos mongodb]# ln -s /usr/local/mongodb/mongodbserver5.0.4/bin/mongo /usr/bin/mongo [root@VM-16-8-centos mongodb]# [root@VM-16-8-centos mongodb]# [root@VM-16-8-centos mongodb]# mongo MongoDB shell version v5.0.4 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("f3bcb302-5aa6-47e3-a043-79cd9851d3bd") } 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/ ================ Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see https://docs.mongodb.com/ Questions? Try the MongoDB Developer Community Forums https://community.mongodb.com --- The server generated these startup warnings when booting: 2021-12-02T17:14:30.866+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2021-12-02T17:14:31.513+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2021-12-02T17:14:31.513+08:00: You are running this process as the root user, which is not recommended 2021-12-02T17:14:31.513+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' --- --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- > ``` 显示如上信息,标识已经成功进入mongo数据库了,默认是进入的是test数据库,show dbs 查看当前所有数据库。 ``` > > db test > > show dbs admin 0.000GB config 0.000GB local 0.000GB > ``` **注意:此时没有使用用户名密码即可登录MongoDB数据库,这是非常危险的,故此我们应该设置授权登录** ### ②、添加用户、安全认证 首先,必须使用admin数据库,进行新用户授权。 注:MongoDB副本集默认会创建local、admin数据库,local数据库主要存储副本集的元数据,admin数据库则主要存储MongoDB的用户、角色等信息。 ![使用admin数据库](https://www.minedeed.com/content/uploadfile/202112/870f1638437972.png "使用admin数据库") 其次,执行一下添加用户的命令: ``` db.createUser( {user: "root",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]}); ``` 注:mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase 成功后,将会看到下面: ![设置root用户](https://www.minedeed.com/content/uploadfile/202112/5b181638438161.png "设置root用户") 注:添加完用户后可以使用show users或db.system.users.find()查看已有用户. ![查看用户](https://www.minedeed.com/content/uploadfile/202112/b7b51638438253.png "查看用户") 再次,添加完用户后,关闭MongoDB服务 注意:注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),可以使用db.shutdownServer()关闭. ![关闭MongoDB服务](https://www.minedeed.com/content/uploadfile/202112/bf6b1638438519.png "关闭MongoDB服务") 上图中查看mongo服务进程,可看到服务已经成功停掉了。 最后,到配置文件中修改配置,启用安全认证。 ``` vi /usr/local/mongodb/etc/mongodb.conf ``` 添加如下配置: ``` #开启认证,必选先添加用户 auth=true ``` ![开启认证](https://www.minedeed.com/content/uploadfile/202112/a77d1638438933.png "开启认证") 开启下服务,进入数据库测试 ``` ./mongod --config /usr/local/mongodb/etc/mongodb.conf ``` ## ③、开启认证后,再次操作数据库 ![开启认证服务后未登录查看](https://www.minedeed.com/content/uploadfile/202112/90871638439288.png "开启认证服务后未登录查看") show dbs此时看不到任何数据库,证明安全认证用户配置已经生效了。 再次使用admin数据库,通过db.auth('root','密码')登录,输出1就是验证成功 ![登录后查看](https://www.minedeed.com/content/uploadfile/202112/70861638439463.png "登录后查看") # 客户端远程连接 ## 1、首先开启防火墙端口27017 ## 2、使用Navicat连接 ![Navicat连接云MongoDB](https://www.minedeed.com/content/uploadfile/202112/17d91638439758.png "Navicat连接云MongoDB")
# 背景 最近在写SpringCloud+SpringBoot+MyBatis+Vue+ElementUI的相关的项目; 项目中有使用到consul; 本地Windows系统运行Consul,每次都要命令行启动,太不方便,最近只好部署到云服务器上。 # 下载 首先下载安装包,下载地址:[consul下载地址](https://www.consul.io/downloads.html "consul下载地址") 可以手动下载,也可以在服务器上直接下载 命令如下: ``` wget https://releases.hashicorp.com/consul/1.10.4/consul_1.10.4_linux_amd64.zip ``` # 解压缩 ``` unzip consul_1.10.4_linux_amd64.zip -d /usr/local/bin ``` # 设置环境变量 将/usr/local/bin/consul设置到环境变量中 ``` vi /etc/profile # 进入vim编辑模式后,按“i”进行编辑 # 最后一行输入 export CONSUL_HOME = /usr/local/bin/consul export PATH=$PATH:CONSUL_HOME ``` 使用环境变量配置生效 ``` source /etc/profile ``` # 验证 查看consul版本,验证是否安装成功 ``` [root@VM-16-8-centos bin]# consul version Consul v1.10.4 Revision 7bbad6fe Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents) ``` # 运行 ## 运行一个开发模式的单节点consul ``` consul agent -dev -ui -client 0.0.0.0 ``` 云服务器控制台添加consul出站访问规则,不输入日志后台执行如下命令: ``` consul agent -server -data-dir=/usr/local/consul-data/ -node=agent-one -bind=0.0.0.0 -bootstrap-expect=1 -client=0.0.0.0 -ui > /usr/local/consul-data/logs/consul.log 2>&1 & ``` 服务器显示如下: ``` [root@VM-16-8-centos local]# consul agent -server -data-dir=/usr/local/consul-data/ -node=agent-one -bind=0.0.0.0 -bootstrap-expect=1 -client=0.0.0.0 -ui > /usr/local/consul-data/logs/consul.log 2>&1 & [1] 627003 [root@VM-16-8-centos local]# ``` ## 查看启动结果 命令如下: ``` consul members [root@VM-16-8-centos local]# consul members Node Address Status Type Build Protocol DC Segment agent-one 10.0.16.8:8301 alive server 1.10.4 2 dc1 [root@VM-16-8-centos local]# ``` 命令输出显示了节点名称、IP端口、健康状态、启动模式、所在数据中心和版本信息。 # 访问Consul的WebUI控制台 访问Consul的WebUI控制台,WEB控制台默认端口为:8500 ![consul-WebUI界面](https://www.minedeed.com/content/uploadfile/202112/29431638414903.png "consul-WebUI界面") 接下来就可以在项目中使用了 # 停止agent服务 通过consul leave命令优雅停止服务,我们再打开一个从节点机器终端,运行该命令 ``` [root@VM-16-8-centos local]# consul leave Graceful leave complete ```
# 背景 win10系统电脑安装Docker Desktop # 拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.0 # 查看docker镜像信息 docker image ls 镜像列表如下: ![docker镜像列表](https://www.minedeed.com/content/uploadfile/202111/50011637910291.png "docker镜像列表") # 本地创建ES文件夹 data目录用来存放elasticsearch存储的数据。 结构目录如下: ``` dockerfile |- elasticsearch | |- data |- docker-compose.yml ``` # 编写docker-compose文件 主要作用是批量启动容器,避免在使用多个容器的时候逐个启动的繁琐。 docker-compose.yml内容如下: ``` version: "3" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.3.0 container_name: elasticsearch restart: always networks: - elk ports: - "9200:9200" - "9300:9300" volumes: - D:\\develop\\dockerfile\\elasticsearch\\data:/usr/share/elasticsearch/data ``` # 启动ES服务 - 1、Win+R,输入“powershell”,进入命令行模式 - 2、进入docker-compose.yml文件所在目录 - 3、运行命令:`docker-compose up -d` 执行过程如下图所示: ![docker运行ElasticSearch](https://www.minedeed.com/content/uploadfile/202111/6ba31637910921.png "docker运行ElasticSearch") 执行完成之后,通过 `docker ps` 命令查看,发现elasticsearch确实启动起来了 ![docker运行服务查看](https://www.minedeed.com/content/uploadfile/202111/2df11637911100.png "docker运行服务查看") # Docker Desktop 查看运行日志 ![docker desktop运行镜像查看](https://www.minedeed.com/content/uploadfile/202111/dc301637911227.png "docker desktop运行镜像查看") 在运行过程中发现ElasticSearch一直在重启,没有办法稳定运行。 排查发现ES服务运行的异常如下 ``` [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] ``` ## 问题解决 ### 原因: Linux Distro Virtual Memory Areas 默认的vm.max_map_count值是65530,太小不足以支撑ELK的运行。需要将该值增大到至少262144。 ### 解决方法一: 命令: ``` wsl -d docker-desktop sysctl -w vm.max_map_count=262144 exit ``` 然而这种方法有弊端,重启容器后发现以上设置失效了。 所以推荐下面这种。 ### 解决方法二: 还是命令: ``` wsl -d docker-desktop echo 262144 >> /proc/sys/vm/max_map_count exit ``` 这种方法即使系统重启、容器重启,参数仍然有效。 问题解决。 问题参考链接: [windows max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]](https://blog.csdn.net/lsqtzj/article/details/119960484 "windows max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]") [vm.max_map_count [65530] is too low 问题解决(Windows 10、WSL 2、Docker Desktop)](https://blog.csdn.net/Pointer_v/article/details/112395425 "vm.max_map_count [65530] is too low 问题解决(Windows 10、WSL 2、Docker Desktop)")
# 1、textarea文本域HTML代码 ```HTML .mian-textarea{width: 388px;height: 198px;background: #FFFFFF;border: 1px solid #CCCCCC;padding: 16px;} .mian-textarea-word{height: 22px;line-height: 22px;text-align: right;color: #999;font-size: 14px;margin-top: 23px;} .mian-textarea-word span{font-size: 14px;color: #333;} .mian-textarea textarea{width: 100%;line-height: 22px;height: 154px;font-family: "微软雅黑";color: #333;font-size: 16px;resize:none;outline: none;} .mian-textarea textarea::-webkit-input-placeholder{color: #ccc;} 0 / 240 ``` # 2、分析 我们需要在键盘输入后显示输入文本的长度,那么就需要在textarea中使用onkeyup事件(当用户释放键盘按钮时执行Javascript代码);并写入到span中 # 3、实现 HTML代码 ```HTML 0 / 240 ``` js代码 ```javascript function textareaLength(obj, maxLength, id) { var curr = obj.value.length; if (curr > maxLength) { alert("最多可输入240字!"); } else { // document.getElementId(id).innerHTML = curr; $('#' + id)[0].innerHTML = curr; } } ```
# 1、背景 [2021年8月5日 JavaScript获取工作日](https://minedeed.com/JavaScript/11.html "2021年8月5日 JavaScript获取工作日") 上篇文章讲到,Lucas提了个需求:初始时间为工作日,要找n天后的工作日的时间,要用JavaScript来写,周末又来了,JavaScript不满足需求了,要用Java来写。 还要写的通用一些。我脸上浮现了毫无灵魂的微笑。。。 当然,只是排除了周末,节假日不管的! 废话不多说,直接上代码吧! # 2、代码 ```java package com.mahalalel.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 获取n天后的工作日时间 * * @author Mahalalel * @createTime 2021/8/9 14:12 */ public class WorkDayUtil { /** * 日期格式 */ public static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd"); /** * 获取工作日时间 * * @param startDate 起始时间 * @param num num个工作日 * @return */ public static Date getWorkDay(Date startDate, int num) throws ParseException { Date tomorrow = null; int delay = 1; while (delay
# 1、问题 FreeMarker template error (DEBUG mode; use RETHROW in production!): Template inclusion failed (for parameter value "../common/header.ftl"): Template not found for name "../common/header.ftl". Reason given: Backing out from the root directory is not allowed. 原因:**Backing out from the root directory is not allowed.** FreeMarker没法引入配置模版文件目录的上层文件夹中的模板文件. # 2、排查 ## 2-1、ftl文件引入 错误的引用: ```ftl ``` 项目的目录结构如下: [![](https://minedeed.com/content/uploadfile/202108/cddb1628231009.png)](https://minedeed.com/content/uploadfile/202108/cddb1628231009.png) ## 2-2、后台返回 ```java @GetMapping("/login") public String login(Model model) { return "admin/system/login"; } ``` ## 2-3、ftl引用修改 ```ftl ``` # 3、启动测试后正常显示页面
# 背景 小伙伴Lucas有个需求:初始时间为工作日,要找n天后的工作日的时间 # 实现 ## 第一种 ```javascript /** * 判断下一个工作日的时间 */ function get_next_weekday(date) { var tomorrow = new Date(date.setDate(date.getDate() + 1)) return tomorrow.getDay() % 6 ? tomorrow : get_next_weekday(tomorrow) } function getWeekday(date,num){ for (let i = 1; i
# 1、时间字段设置默认值 ```java @Column(name="CREATE_TIME", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false) @Generated(GenerationTime.INSERT) private Date createTime; ``` 解释: ①、columnDefinition:设置默认值以及生成注释 ②、GenerationTime:可用选项ALWAYS、INSERT和NEVER; - 选项为NEVER,SQL执行INSERT和UPDATE时,不会获取数据库默认值 - 选项为INSERT,SQL只会在INSERT时,获取数据库默认值 - 选项为ALWAYS,表明该属性的值由数据库生成;在每次执行insert、update时执行select语句来查询获取该属性的值;此时属性也应该标识为只读(insertable、updatable) ③、insertable、updatable:设置为false,该属性就不会在insert或者update语句中出现,该属性的值就由数据库默认值设置 # 2、使用GetMapping获取数据异常解决 ## 2-1、异常如下: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.mahalalel.baseproject.entity.OperaterLog$HibernateProxy$JJMDYJDv["hibernateLazyInitializer"]) ## 2-2、原因 spring boot使用jpa查询返回实体后,返回接口时候json格式化出错; fastxml.jackson将对象转为json报错,发现有些字段为null; 在接口实现类中,使用了getOne(Long id)方法,这个方法返回的是对象的引用。 ## 2-3、解决 在实体类添加如下注解: @JsonIgnoreProperties(value = { "hibernateLazyInitializer"}) ## 2-4、测试 使用postman访问接口,返回正确数据库数据 # 3、时间设置 ## 3-1、一般创建时间只会在插入数据的时候,生成数据;更新时间只有在数据更新的时候,设置数据 创建时间字段添加注解@CreatedDate;更新时间字段添加注解@LastModifiedDate ```java @Column(name = "create_time") @CreatedDate private Date createTime; @Column(name = "update_time") @LastModifiedDate private Date updateTime; ``` ## 3-2、实体类添加监听器注解 ```java @EntityListeners(AuditingEntityListener.class) public class Entity { } ``` ## 3-3、最重要的,需要在启动类中添加启用JPA审计功能的注解 ```java @EnableJpaAuditing public class ProjectApplication { } ``` ## 3-4、经过测试,发现创建数据时,时间可以写入,但是更新时,创建时间仍然会被置为null 故使用第一种方式: ```java @Temporal(TemporalType.TIMESTAMP) @CreationTimestamp @Column(name = "create_time", updatable = false, columnDefinition = "timestamp default current_timestamp comment '创建时间'") private Date createTime; @Temporal(TemporalType.TIMESTAMP) @UpdateTimestamp @Column(name = "update_time") private Date updateTime; ``` ---未完待续
# 1、自定义了配置文件 ```properties praise.siteName = mahalalel praise.siteUrl = http://127.0.0.1 ``` # 2、配置文件配置 ```java @ConfigurationProperties(prefix = "praise", value = "site.properties") ``` # 3、启动应用 报如下错误 ```log In AnnotationAttributes for annotation [org.springframework.boot.context.properties.ConfigurationProperties] declared on class 'com.xxx.config.SiteConfig', attribute 'prefix' and its alias 'value' are declared with values of [praise] and [site.properties], but only one is permitted. ``` 错误原因在于,注解ConfigurationProperties的属性prefix和value不能同时使用 # 4、修改并验证 ```java @ConfigurationProperties(prefix = "praise") public class SiteConfig { private String siteName; private String siteUrl; // get/set方法省略 } ``` 控制器内调用 ```java @RestController @RequestMapping("/task") public class TaskController { @Autowired private SiteConfig siteConfig; @GetMapping("/hello") public String hello(){ String siteName = siteConfig.getSiteName(); return "Hello Task!!!!" + siteName; } } ``` 访问地址:http://localhost:8081/task/hello 页面显示: ``` Hello Task!!!!mahalalel ```
# 1、问题出现 项目需求,要求导出Excel带上时间,所以我就用常用的日期时间格式:yyyy-MM-dd HH:mm:ss; 但是测试过程中出现以下异常 Exception occurred during processing request: Invalid char (:) found at index (16) in sheet name '报名表2021-08-02 15:00:34' java.lang.IllegalArgumentException: Invalid char (:) found at index (16) in sheet name '报名表2021-08-02 15:00:34' # 2、问题分析 出现以上问题,是因为在导出Excel的时候,Excel的名字中带了“:”; 大家可以看到我取的Excel名称“报名表2021-08-02 15:00:34”,这样的Excel名称就会有问题 另外在桌面新建Excel时,名称不允许包含以下字符: \/:*?"| [![](https://minedeed.com/content/uploadfile/202108/20b51627952752.png)](https://minedeed.com/content/uploadfile/202108/20b51627952752.png) # 3、解决方法 修改java导出日期格式,使用“yyyy-MM-dd HH_mm_ss” SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss"); # 4、发散 通过图片我们可以知道导出Excel时,不能设置“\/:*?"|”,否则程序会报错