首页
碎碎念
东邻西舍
本站信息
前来吐槽
统计
Search
1
openwrt系统上安装第三方插件
26,761 阅读
2
ubuntu下zerotier的基本使用教程
13,581 阅读
3
给小米R3G更换系统:从padavan刷成openwrt
12,849 阅读
4
openwrt使用第一步:设置上网拨号
10,744 阅读
5
openwrt无线中继功能:实现不插网线就能上网
9,522 阅读
学习点滴
Java
Web前端
Linux
踩坑实录
折腾搞机
关于建站
只言片语
登录
Search
标签搜索
Linux
建站
Java
踩坑实录
Ubuntu
MySQL
折腾搞机
HTML
CSS
MyBatis
Spring
SQL
Nginx
路由器
树莓派
OpenWrt
Maven
Git
Win10
只言片语
知识分子没文化
累计撰写
83
篇文章
累计收到
152
条评论
首页
栏目
学习点滴
Java
Web前端
Linux
踩坑实录
折腾搞机
关于建站
只言片语
页面
碎碎念
东邻西舍
本站信息
前来吐槽
统计
搜索到
83
篇与
的结果
2022-01-16
Ubuntu搭设CS1.6游戏服务器
目录: 前言 一、创建系统新用户 二、SteamCMD 2.1、安装 2.2、进入 SteamCMD 控制台 三、下载游戏服务器文件 3.1、设置下载位置 3.2、下载文件 四、启动服务器程序 4.1、启动 4.2、报错信息 4.2.1、报错信息之一 4.2.2、报错信息之二 4.2.3、报错信息之三 4.3、开放端口 五、连接服务器 环境说明: 服务器:阿里云轻量应用服务器 系统:Ubuntu 20.04 前言 CS,全称 Counter-Strike,起初是1999 年由民间团队为游戏《半条命(Half-Life)》的开发的游戏模组,由于后来深受玩家的喜爱,2000年由 Valve 购得版权发行成为独立游戏。后续出过《反恐精英:零点行动》《反恐精英:起源》和《反恐精英:全球攻势》等续作。CS 1.6 作为这个系列的一代经典以及童年回忆,其在整个游戏史上的地位怎样美言都不过分。 最近心血来潮,想搭建一个 CS1.6 服务器来玩一玩,查了不少资料,大概有了点头绪。 CS1.6 有一个专门的服务器程序,叫 HLDS(Half-Life Dedicated Server),即半条命专用服务器,是 Valve 官方(也就是俗称的“V 社”)提供的 CS1.6 服务器端程序。 在下载 CS1.6 的服务器程序时,需要用到 SteamCMD,即 Steam 控制台客户端,这是 Valve 官方开发的一个命令行版本的 Steam 客户端,它的主要用途就是安装和更新 Valve 开发的游戏的专用服务器程序文件。 一、创建系统新用户 安装 SteamCMD 之前需要先创建一个用户。 因为按照官方文档的建议,最好创建一个新用户来专门运行 SteamCMD,使用 root 用户运行 SteamCMD 时会有安全风险。当然理论上来说,如果当前用户是非 root 用户,那么可以不创建新用户,使用当前用户直接操作也是一样的。 相关参考资料:Linux 用户和用户组管理 | 菜鸟教程 (runoob.com) 注意:这一步的操作需要 root 权限。 创建一个名为 steam 的新用户: #-m:自动创建用户目录 #-s:指定用户的shell解释器,这里设为bash useradd -m -s /bin/bash steam 然后设置用户密码: passwd steam 到这一步之后,执行后面的 apt 命令时,可能会出现报错: steam is not in the sudoers file. This incident will be reported 或者: steam 不在 sudoers 文件中,此事将被报告 解决方法有两种(需要有 root 权限): 按照报错提示,将 steam 用户添加到 sudoers 文件中,编辑 sudoers 文件: sudo nano /etc/sudoers 仿照root用户的格式,在如下位置添加 steam 这一行内容(请忽略 steam 前的“+”,这只是为了方便说明这一行内容是新添加的): # User privilege specification root ALL=(ALL:ALL) ALL + steam ALL=(ALL:ALL) ALL ctrl + o 保存,ctrl + x 退出。 将 steam 用户添加到 sudo 用户组(在 root 用户下操作): adduser steam sudo 最后切换到新建的 steam 用户: su steam 二、SteamCMD SteamCMD 的官方文档:Main Page:zh-cn - Valve Developer Community (valvesoftware.com) 下面的这部分参考自官方文档,如果这个过程中有疑问的话也可以读一读官方文档。另外,值得一提的是,官方文档中的大部分资料都提供了中文版本,这点给个大大的好评。 2.1、安装 安装方法:Steam 控制台客户端 - Valve Developer Community (valvesoftware.com) 在官方文档中提供了两种方式来安装 SteamCMD,一种是安装来自软件仓库的软件包,另一种是手动下载压缩包再解压安装。 为了方便,直接采用第一种,用 apt 命令安装 SteamCMD: sudo apt update && sudo apt install software-properties-common sudo add-apt-repository multiverse sudo dpkg --add-architecture i386 # 安装相关依赖 sudo apt install lib32gcc1 libsdl2-2.0-0:i386 # 安装 SteanCMD sudo apt install steamcmd 安装过程中会出现如下界面,按 Tab 键选择到 OK 再按回车确认 选择“I AGREE”,回车确认,等候等待安装完成。 2.2、进入 SteamCMD 控制台 输入以下命令进入 SteamCMD 控制台: steamcmd 如果是手动安装的 SteamCMD,那么还需要在当前目录下生成一个软链接: ln -s /usr/games/steamcmd steamcmd 否则使用 steamcmd 命令时会提示找不到命令。如果直接使用 apt 命令安装的话则不用生成软连接。 第一次进入时,会更新文件,等待更新完成即可进入 SteamCMD 控制台: 更新完成后会在当前目录下生成一个隐藏的 .steam 文件夹,使用 ls -al 命令查看。 进入到 SteamCMD 控制台之后,如果出现警告信息: Warning: failed to init SDL thread priority manager: SDL not found 这是由于缺少依赖,输入 quit 退出 SteamCMD 控制台,再执行以下命令安装依赖: sudo apt install libsdl2-2.0-0:i386 当正常进入 SteamCMD 控制台后,没有报错信息,就可以开始下载游戏文件了。 三、下载游戏服务器文件 3.1、设置下载位置 下载之前,先设置文件的下载位置: # 用绝对路径: force_install_dir /home/steam/cs1.6 3.2、下载文件 下载游戏服务器文件需要登录,我们可以选择匿名登录: login anonymous 这里就有一个问题,我先匿名登录了之后再设置下载目录,然后就出现了报错,提示要在登录之前设置下载位置: 而在官方文档的这个位置:Steam 控制台客户端 - 下载一个应用,这段描述意思是可以先登录再设置下载目录的,所以我也不清楚这是什么情况,按实际情况来就好吧。 以上准备完成之后就可以下载 CS1.6 游戏服务器文件了: app_set_config 90 mod cstrike app_update 90 validate 需要注意的是,由于 BUG,中途可能下载中断,再次运行 app_update 90 validate 命令会继续下载。多试几次等待出现 “Success” 字样: 服务端文件下载完成之后,输入 quit 退出 SteamCMD 控制台。 我在下载完之后,找下载好的文件时踩了不少坑。下了好几遍之后,最后我发现规律如下: 如果不设置下载目录,则默认会下载到当前目录的 .steam 隐藏文件夹下,具体路径为:.steam/steamapps/common/Half-Life 。 如果将下载目录设置为了绝对路径,那么按照绝对路径就能找到; 如果用了相对路径,则是在隐藏的 .steam 路径下 ,具体路径为 ./steam/steamcmd/; 所以,为了比较容易找到之后下载下来的游戏服务器文件,我的建议是在下载之前将路径设置成绝对路径。 四、启动服务器程序 4.1、启动 启动之前,将目录定位到服务器程序文件的根目录下,先给启动程序赋予执行权限: sudo chmod a+x hlds_run hlds_linux hltv 启动命令为: # 启动 cs1.6 服务器,服务器端口为 27015,地图为“de_dust2”,最大容纳人数为 16 ./hlds_run -game cstrike +port 27015 +map de_dust2 +maxplayers 16 启动命令的格式为: ./hlds_run -game <game> +maxplayers X +map <map> +port <port> 这段启动命令看似复杂,其实并不,简单分析一下你就明白了: ./hlds_run 是根目录下的服务器启动程序,后面一大段是启动参数,几个基本的启动参数含义如下: 参数 含义 -game 游戏名称 +port 游戏服务器启动端口 +map 设置地图 +maxplayers 地图最大容纳人数(2~32) 更多的启动参数可以参考这份官方文档:Command Line Options - Valve Developer Community (valvesoftware.com) 4.2、报错信息 这里我碰到了问题,服务虽然启动起来了,但是有报错信息。不过经过后来的尝试,游戏客户端能连接到服务器,应该是不影响服务基本运行。 但是为了保险起见,我觉得还是有必要消除这些报错信息,尝试着用我的渣渣英语水平分析了一下控制台输出中的报错信息,提取出来一部分可能有用的信息,再加上一些网上其他大佬的资料,差不多就能部分解决这些报错了。 4.2.1、报错信息之一 [S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed. 这个看提示像是 SteamAPI_Init() 与 SteamAPI_IsSteamRunning() 这两个方法执行失败,找了些资料之后还是无法下手解决,就念在它不影响运行的份上放过它吧。 4.2.2、报错信息之二 dlopen failed trying to load: /home/steam/.steam/sdk32/steamclient.so with error: /home/steam/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory 结合这篇博客 Debian10搭建CS1.6服务器-Rain's Blog (im.ci) 的内容,基本可以确定是这个博主所说的游戏服务器文件缺失的问题,缺失的文件是 .steam/sdk32/steamclient.so,我们可以手动把 .steam/steamcmd/linux32 目录下的 .steamclient.so 文件复制过来一份: # 整个操作还是在 .steam 目录下: mkdir /home/steam/.steam/sdk32 cp /home/steam/.steam/steamcmd/linux32/steamclient.so /home/steam/.steam/sdk32 4.2.3、报错信息之三 couldn't exec listip.cfg couldn't exec banned.cfg 原因在点通论坛的这篇帖子linux系统架设cs1.6服务器图文教程(兼容47/48协议的non-steam)第二部分中提到了,是因为服务器文件根目录的 cstrike 文件夹下缺少了 listip.cfg 和 banned.cfg 这两个文件,listip.cfg 是存放踢出的玩家 IP,banned.cfg 存放的是被管理员封禁的玩家 IP。 所以消除警告信息的办法就是创建这两个文件(空文件即可): # 进入 cstrike 文件夹下 cd ~/cs1.6/cstrike/ # 创建文件并且给775权限 touch listip.cfg banned.cfg && chmod 775 listip.cfg banned.cfg 以上步骤做完之后,ctrl + c 取消刚才的运行,再重新启动一次服务,这样就没有报错信息了。 4.3、开放端口 这是很重要的一步,但也很容易被忽略,不管搭建出怎样牛逼的服务,端口不开放那都是白搭。 开放端口具体步骤就不再赘述了,各个服务器厂商的操作都是大同小异的,无非就是在服务器控制台找“防火墙”之类的字眼,进去之后添加端口即可。 按照官方文档:Half-Life Dedicated Server - Valve Developer Community (valvesoftware.com),完整的游戏服务总共需要四个端口: 端口号 网络类型 用途说明 27015 UDP 游戏传输、pings 27015 TCP RCON协议(RCON - 百度百科) 27020 UDP HLTV 传输(HLTV - 百度百科) 26900 UDP VAC 服务 如果仅仅维持基本的游戏服务及远程管理,只需要添加如下两个端口即可: 到这里,没什么问题的话,服务器就已经运行起来,可以被我们的游戏连接了。 五、连接服务器 现在正版 CS1.6 客户端就可以连接这个服务器了。在首页用~调出控制台,输入命令 connect ip地址/域名,回车即可连接。 或者也可以在游戏中搜索 IP 地址或域名: 可以看到,已经搜索出来了刚建的服务器: 双击可以直接加入。 这是已连接到的样子: 至此,我们用官方工具成功搭建出了一个 CS1.6 的游戏服务器。目前这个服务器还只能允许正版 CS1.6 玩家游玩,下一篇,我们将会通过安装插件来破解这个限制,并且对这个游戏服务器做一些优化。 下一篇链接:CS1.6 服务器安装插件及优化教程 - Roookie博客 | 记录 · 收纳 · 分享 (wlplove.com) 参考资料: Debian10搭建CS1.6服务器-荒岛 (lala.im)(这篇博客可能需要科学上网才能看到) cs1.6服务器搭建 2021-11-30 - 王冰冰 - 博客园 (cnblogs.com) linux系统架设cs1.6服务器图文教程(兼容47/48协议的non-steam) - HLDS 技术讨论区 - 点通论坛(dt-club.net)
2022年01月16日
4,912 阅读
13 评论
0 点赞
2021-12-26
网站统计后台的垃圾广告及屏蔽措施
目录: 一、后台垃圾广告是什么 二、预防措施 1. 排除访客 IP 2. 加密统计代码 一、后台垃圾广告是什么 我的博客接入了百度统计与 CNZZ 平台来进行访客统计,大部分时候在网站统计平台上查看访客数据时,会碰到这样的记录: 其实百度统计上还比较少,主要集中在 CNZZ 上,这些记录通常是用各种各样的灰色词来作为关键词在搜索引擎上进行搜索而产生。后来才知道,这是使用垃圾广告群发软件故意发广告的。 关于其原理,我用部分转载的内容来进行说明(原文链接附在文末): 我们知道现有大多的统计,都是让我们在自己网站上放一段统计代码,然后对网站流量进行统计,例如百度统计,在安装百度统计工具到网站的时候,我们会要求网站必须嵌入一段类似下面的JS代码: var _hmt = _hmt || []; (function() { var hm = document.(“script”); hm.src = “https://hm.baidu.com/hm.js?89764654ds8w2082cffb3b7e1f2d1238f”; var s = document.getElementsByTagName(“script”)[0]; s.parentNode.insertBefore(hm, s); })(); 这段统计代码中,每一个网站都会有一个32位字符串就是每个站点特有的统计ID。 89764654ds8w2082cffb3b7e1f2d1238f 群发软件会先拿到你网站的ID,这个很简单,通过原代码就可以查到这个统计ID,群发软件会使用采集软件大量采集这些统计ID; 拿到ID后,将你的域名与ID对应放到群发软件里,设置好关键词和推广网址就可以群发垃圾广告了。 二、预防措施 1. 排除访客 IP 我刚开始一直都是使用这种方式。 CNZZ 直接在左侧菜单找到“排除访客 IP”: 百度统计找到“管理” -> “统计规则设置” -> “过滤规则设置” -> “排除 IP 地址”: 这是最简单粗暴的办法,直接将刷垃圾广告的 IP 地址加入排除访客 IP 的名单中,从访客列表中直接隐藏,从而眼不见心不烦。但是,刷广告的一般都是使用多个 IP 地址,屏蔽了一个 IP 地址之后他们还能使用其它的 IP 地址继续作案,所以这种方式治标不治本。 因此更推荐使用的是下面这种方式。 2. 加密统计代码 这是从源头来预防后台垃圾广告的方法,就是将站点统计代码进行一次 JS 混淆,从而达到隐藏站点统计 ID 的目的。 比如,从 CNZZ 或者百度统计上获取到统计代码之后,使用 JS 加密工具: 以后使用混淆过的统计代码,可有效预防统计后台的垃圾广告。 需要注意的是,在刚开始使用了加密了的统计代码之后,可能依然会有部分刷广告的记录(至少我的情况是这样),将这些 IP 加入排除访客 IP 名单里,之后就会是一个干干净净的统计后台了。 部分内容参考自: 如何屏蔽网站统计后台的垃圾广告 - 学做网站论坛
2021年12月26日
1,821 阅读
0 评论
0 点赞
2021-12-20
Spring Boot学习笔记
目录 一、Spring Boot简介 二、Spring Boot的主要特性 2.1、自动配置 2.2、起步依赖(Starters) 2.3、简化配置 2.4、内置服务器 2.5、无代码生成与 XML 配置 三、Spring Boot的配置 3.1、配置文件类型 3.1.1、application.properties 3.1.2、application.yaml(或.yml) 3.2、配置优先级 3.2.1、配置文件位置的优先级 3.2.2、配置文件格式的优先级 3.3、读取配置文件的方式 3.3.1、使用@Value注解 3.3.2、使用Environment对象 3.3.3、将部分配置封装成实体类 3.4、多环境开发时配置文件的切换 3.5、yml配置文件示例 四、整合MyBatis 4.1、添加起步依赖 4.2、添加配置 4.3、扫描Mapper接口 五、使用Maven打包Spring Boot项目 一、Spring Boot简介 Spring Boot 是 Spring 框架的一个扩展,旨在简化 Spring 应用的初始搭建和开发过程。它通过自动配置和约定优于配置的原则,提供一个开箱即用的应用程序架构,能够快速构建独立运行的 Spring 应用,开发者基于 Spring Boot 的预置结构继续开发,省时省力。 Spring Boot 官方文档:https://docs.spring.io/spring-boot/index.html Spring 中文网翻译的 Spring Boot 中文文档:https://springdoc.cn/spring-boot 通过 IDEA 创建 Spring Boot 项目: 添加核心依赖 Spring Web: 除了用 IDEA 创建 Spring Boot 项目,也可以直接访问 Spring Boot 项目生成网站,设定项目的元数据(如项目类型、语言、Spring Boot 版本等)之后,创建好的项目就会以压缩包的格式下载到本地,解压导入到开发工具即可。 Spring Boot 项目生成网站: https://start.spring.io/:Spring Boot 官方的项目生成工具,Java 版本和 Spring Boot 版本都比较新,国内有可能访问不了或访问速度比较慢 https://start.springboot.io/:官方项目生成工具的国内镜像,Java 版本和 Spring Boot 版本与官网一致,国内都能访问 https://start.aliyun.com/:从域名能看出来是阿里云镜像,国内都能访问,而且能用旧的 Java 版本和 Spring Boot 版本生成项目 一个典型的 Spring Boot 项目结构如下: SpringBoot-project/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── MyApplication.java │ │ └── resources/ │ │ ├── application.properties │ │ └── static/ │ │ └── templates/ │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── MyApplicationTests.java ├── pom.xml └── README.md MyApplication.java:Spring Boot 应用的主类,使用 @SpringBootApplication 注解标记。 application.properties:Spring Boot 应用的配置文件,可以配置各种属性。 static/:存放静态资源文件,例如 HTML、CSS、JavaScript 文件等。 templates/:存放模板文件,例如 Thymeleaf、Freemarker 等。 二、Spring Boot的主要特性 2.1、自动配置 开发者无需手动配置大量 XML 或注解,Spring Boot 能够根据项目中添加的依赖,自动为应用程序生成合理的默认配置,减少手动配置。例如,在项目中添加了 spring-boot-starter-web 依赖,Spring Boot 会自动配置嵌入式的 Tomcat 服务器,并为 Spring MVC 设置好必要的组件,如 DispatcherServlet 等,无需开发者手动编写大量的配置代码。 2.2、起步依赖(Starters) 起步依赖是指对常用库和框架的依赖声明的集合,使用起步依赖可以一次性地添加相关的依赖和配置到项目中,大大简化了项目的依赖管理,减少因依赖冲突而导致的问题。 比如,spring-boot-starter-data-jpa 包含了使用 Spring Data JPA 进行数据库操作所需的所有依赖,包括 Hibernate、Spring Data JPA 和数据库连接池等。 2.3、简化配置 Spring Boot 使用 application.properties 或 application.yml 作为统一的配置文件,将应用程序的各种配置集中管理,并且提供默认配置,尽量减少开发者的手动配置。这些配置文件放置在项目的类路径下,Spring Boot 会自动加载并应用其中的配置。 并且 Spring Boot 支持多环境配置,允许开发者根据不同的运行环境(如开发、测试、生产)使用不同的配置文件。通过在配置文件名中使用 {profile} 占位符,如 application-dev.yml、application-prod.yml,并在 application.yml 中指定 spring.profiles.active 属性来激活相应的环境配置。 2.4、内置服务器 Spring Boot 支持嵌入式的服务器,如 Tomcat、Jetty 和 Undertow 等,开发者可以将应用程序打包成一个可执行的 JAR 文件,使用 java -jar 命令可启动服务,无需单独部署到外部的应用服务器上。 例如,在开发 Web 应用时,只需在 pom.xml 文件中添加 spring-boot-starter-web 依赖,Spring Boot 会自动配置并启动一个嵌入式的 Tomcat 服务器,让开发者可以快速进行开发和测试。 2.5、无代码生成与 XML 配置 Spring Boot 无需代码生成和 XML 配置,完全基于注解和 Java 配置。 三、Spring Boot的配置 3.1、配置文件类型 Spring Boot 支持两种主要的配置文件类型:application.properties 和 application.yaml(.yml)。 3.1.1、application.properties 这是传统的 Java 配置文件格式,每行定义一个属性,采用 key=value 的形式。例如: server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/spring_db spring.datasource.username=root spring.datasource.password=password 3.1.2、application.yaml(或.yml) YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,它的特点包括: 使用缩进(空格数不限)表示层级关系(必须用空格缩进,不能使用 Tab) 使用 key: value 的形式表示键值对 支持列表、嵌套结构等复杂数据类型 例如: server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: password 关于 .yaml 和 .yml 的区别: 在 Spring Boot 项目中,YAML 文件通常以 .yaml 或 .yml 作为文件扩展名。 这两种扩展名本质上是相同的,它们都表示 YAML 格式的文件。.yaml 是 YAML 文件的官方推荐扩展名,而 .yml 是 .yaml 的简写形式。在功能上两者完全等价,Spring Boot 对它们的解析方式没有任何区别,无论使用 .yaml 还是 .yml,Spring Boot 都能正确加载和解析配置文件。 如果同时存在 application.yaml 和 application.yml,Spring Boot 会优先加载 application.yml。 3.2、配置优先级 3.2.1、配置文件位置的优先级 优先级最高的配置是命令行参数,通过命令行传递的这个参数将会覆盖原配置: java -jar app.jar --server.port=9999 不同位置配置文件的优先级分别为: 项目根目录下的 /config 子目录中的配置文件 项目根目录中的配置文件 类路径下的 /config 包中的配置文件 类路径根目录中的配置文件 3.2.2、配置文件格式的优先级 如果在同一个目录下同时存在 application.properties、application.yml、application.yaml 这几个文件,那么 Spring Boot 对配置文件的加载优先级为: application.properties > application.yml > application.yaml 3.3、读取配置文件的方式 假设在 YAML 配置文件中存在如下配置: server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/spring_db?useSSL=false&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver userInfo: name: 张三 age: 30 likes: - 游戏 - 健身 - 读书 3.3.1、使用@Value注解 @Value 注解可以直接将配置文件中的单个属性值注入到类的字段中。 @Component public class ConfiurationBean { // 简单属性 @Value("${spring.datasource.url}") private String url; // 数组 @Value("${userInfo.likes}") private String[] likes; // 数组里的其中一个属性 @Value("${userInfo.likes[1]}") private String like; // ... } 3.3.2、使用Environment对象 在 Spring Boot 中,Environment(org.springframework.core.env.Environment)是一个用于管理应用程序运行时环境配置信息的接口,它可以使开发者方便地获取和使用项目的配置参数,无论是来自 application.properties、application.yml 文件,还是系统环境变量、命令行参数等。 在需要使用 Environment 对象的类中,可以使用 @Autowired 注解将 Environment 对象自动注入进来,然后在类的方法中使用 getProperty() 方法获取配置信息。 @Component public class ConfiurationBean { @Autowired private Environment env; public void printProperty() { // 获取并使用属性 String port = env.getProperty("server.port"); System.out.println(port); } } 3.3.3、将部分配置封装成实体类 创建一个 Java 实体类,属性与配置项一一对应,使用 @ConfigurationProperties 注解将配置文件中的属性绑定到该 Java 对象上: @Component @ConfigurationProperties(prefix = "userInfo") public class UserInfo() { private String name; private int age; private String[] likes; // get方法、set方法、构造方法 } 3.4、多环境开发时配置文件的切换 在项目的开发中,常常需要在多个环境(开发环境 dev、生产环境 prod 等)部署项目,并且每个环境的配置可能都不太一样(如日志等级、数据库属性等),因此每个环境都有单独的一个配置文件。 Spring Boot 支持根据不同的环境加载不同的配置文件,常用的做法是建一个公共配置文件 application.properties 或 application.yml 来存放每个环境中相同的配置,再给每一个环境建一个单独的配置文件存放个性化配置,该配置文件的命名规则为 application-{profile}.properties 或 application-{profile}.yml。 例如开发环境的配置文件为 application-dev.yml,生产环境的配置文件为 application-prod.yml,则在公共配置文件 application.yml 中激活指定配置文件的方式为: spring: profiles: active: dev 也可以在启动项目 JAR 文件时通过命令行参数 spring.profiles.active 指定: java -jar app.jar --spring.profiles.active=dev 如果既在公共配置文件 application.yml/application.properties 中指定了激活哪个配置文件,又通过命令行参数指定,则最后生效的是命令行参数,因为命令行参数的优先级最高。 在 IDEA 中也可以直接指定命令行参数: 新版本 IDEA: 3.5、yml配置文件示例 server: port: 8081 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/spring_db?useSSL=false&setUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 数据源用druid type: com.alibaba.druid.pool.DruidDataSource # MyBatis配置 mybatis: # 指定Mapper XML文件的位置 mapper-locations: classpath:mapper/*.xml # 实体类的包路径 type-aliases-package: com.example.demos.web configuration: # 开启驼峰命名映射 map-underscore-to-camel-case: true # 项目日志等级 logging: level: # 全局日志等级 root: info # 设置MyBatis的日志级别为DEBUG com.example.mapper: debug org.mybatis: debug org.apache.ibatis: debug # 自定义配置 四、整合MyBatis 4.1、添加起步依赖 新版 IDEA 中可以直接在 pom.xml 文件的 <dependencies> 标签旁边点击 “Add Starters” 添加 MyBatis 与 MySql 的起步依赖: 或者手动在 pom.xml 文件中添加 MyBatis 的起步依赖与 MySQL、Druid 的依赖坐标: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.22</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> 4.2、添加配置 然后在配置文件中添加数据源与 MyBatis 配置: spring: datasource: url: jdbc:mysql://127.0.0.1:3306/spring_db?useSSL=false&setUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource # MyBatis配置 mybatis: # 指定Mapper XML文件的位置 mapper-locations: classpath:mapper/*.xml # 实体类的包路径 type-aliases-package: com.example.demos.web # 指定MyBatis的全局配置文件位置,可以进行更细颗粒度的MyBatis配置,不需要就不写 # config-location: classpath:mybatis-config.xml configuration: # 开启驼峰命名映射 map-underscore-to-camel-case: true # 项目日志等级 logging: level: # 全局日志等级 root: info # 设置MyBatis的日志级别为DEBUG com.example.mapper: debug org.mybatis: debug org.apache.ibatis: debug 4.3、扫描Mapper接口 最后在写接口的时候在上面用 @Mapper 注解标记一下这是 MyBatis 的 Mapper 接口: @Mapper public interface UserMapper { User select(); // ... } 或者直接在 Spring Boot 启动类上面用注解 @MapperScan() 进行全局配置扫描,指定 Mapper 接口类的包路径,Spring 会自动扫描该包下的所有接口,并将其注册为 MyBatis 的 Mapper 接口,无需在每个接口上都添加 @Mapper 注解。 @SpringBootApplication @MapperScan("com.example.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 至此,Spring Boot 框架整合 MyBatis 框架完成。 五、使用Maven打包Spring Boot项目 在 pom.xml 文件中,确保配置了 Spring Boot Maven 插件: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.6.3</version> <configuration> <!-- 指定启动程序主类 --> <mainClass>com.example.demo.DemoApplication</mainClass> <skip>false</skip> </configuration> </plugin> </plugins> </build> 在项目根目录下运行打包的命令: # 其实是两条命令,mvn clean是清除项目target目录下的文件,mvn package打包命令,两个命令一起执行。 # -Dmaven.test.skip=true表示排除测试代码之后打包 mvn clean package -Dmaven.test.skip=true 或者在 IDEA 中依次操作 clean 与 package: 打包时,一般都要先进行 clean 操作清理项目之前构建过程中生成的临时文件和输出文件,使项目恢复到初始状态,目的是确保项目不会受到之前构建结果的影响,避免旧的文件干扰新的构建过程。 打包完成后,会生成两个 JAR 文件,其中一个后缀为 .original,只包含工程中的 Class,不包含依赖;另一个后缀为 .jar 的文件是 SpringBoot 打包插件创建的,包含了应用依赖和 Spring Boot 相关的 Class,可以直接运行。生成的 JAR 文件保存在 target 目录下,文件名为 {项目名称}-{版本号}.jar。例如:demo-0.0.1-SNAPSHOT.jar 使用以下命令运行打包好的 JAR 文件: java -jar demo-0.0.1-SNAPSHOT.jar 并且可以通过命令来指定部分参数: java -jar demo-0.0.1-SNAPSHOT.jar --server.port=9999 --spring.profiles.active=prod
2021年12月20日
1,939 阅读
0 评论
0 点赞
2021-12-11
常用的一些Nginx配置
目录: 1、监听端口 2、日志功能 2.1、访问日志 2.2、错误日志 3、配置域名 4、静态资源 5、重定向 5.1、网站根目录重定向 5.2、特定目录重定向 6、反向代理 7、负载均衡 8、SSL配置 1、监听端口 server { # 用于HTTP协议 listen 80; # 用于HTTPS协议 listen 443 ssl; # 用于HTTP2 listen 443 ssl http2; # 使用IPv6监听80端口 listen [::]:80; # 仅使用IPv6 listen [::]:80 ipv6only=on; } 2、日志功能 Nginx的日志分为两种:access_log (访问日志)和 error_log(错误日志)。 对于日志的格式,Nginx提供了一种名为 combine 的格式,如果没有明确指定日志格式则默认使用该格式。 如果不使用 combine 格式的话,可以使用 log_format 指令来自定义,其具体用法参考Nginx日志配置详解或者官方文档:HttpLog模块-Nginx中文文档。 2.1、访问日志 访问日志主要记录客户端的请求,客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。 server { # 访问日志文件的写入位置,相对或绝对路径 access_log /path/to/file.log; # 选择访问日志功能的开启(on)或关闭(off) access_log on; } 2.2、错误日志 错误日志记录服务器和请求处理过程中的错误信息。 server{ # 错误日志的写入位置 error_log logs/error.log error; # 错误日志的级别,分为 debug, info, notice, warn, error, crit, alert,emerg,其取值范围是按紧急程度从低到高排列 # 只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error error_log file [level]; } 3、配置域名 server { # 监听domain.com server_name domain.com; # 监听多个域名 server_name domain.com www.domain.com; # 监听所有域名 server_name *.domain.com; # 监听所有顶级域名 server_name domain.*; # 监听未指定的主机名(比如侦听IP地址本身) server_name ""; } 4、静态资源 server { listen 80; server_name domain.com; location / { # 设置网站的根目录 root /path/to/website; } } 5、重定向 5.1、网站根目录重定向 server { listen 80; server_name www.domain.com; # 将 www.domain.com 进行301重定向,跳转至 http://domain.com$request_uri return 301 http://domain.com$request_uri; } 5.2、特定目录重定向 server { listen 80; server_name www.domain.com; # 将链接 http://www.domain.com/redirect-url 进行301重定向,跳转到http://otherdomain.com location /redirect-url { return 301 http://otherdomain.com; } } 如将 domain.com 永久重定向到 www.domain.com: server { listen 80; server_name domain.com; return 301 http://www.$host$request_uri; } 6、反向代理 反向代理 - 维基百科,自由的百科全书 (wikipedia.org) Reverse proxy - Wikipedia server { listen 80; server_name domain.com; # 对特定主机的3000端口进行反向代理 location / { proxy_pass http://0.0.0.0:3000; } } 7、负载均衡 负载均衡 - 维基百科,自由的百科全书 (wikipedia.org) Load balancing (computing) - Wikipedia upstream node_js { server 0.0.0.0:3000; server 0.0.0.0:4000; server 123.131.121.122; } server { listen 80; server_name domain.com; location / { proxy_pass http://node_js; } } 8、SSL配置 server { listen 443 ssl; server_name domain.com; ssl on; # 证书文件,格式不一定都是pem,还可能是其他格式 ssl_certificate /path/to/cert.pem; # 秘钥文件,格式不一定都是pem,还可能是其他格式 ssl_certificate_key /path/to/privatekey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_timeout 1h; ssl_session_cache shared:SSL:50m; add_header Strict-Transport-Security max-age=15768000; } # 将HTTP永久重定向到HTTPS server { listen 80; server_name domain.com; return 301 https://$host$request_uri; } 部分内容转载修改自: Nginx Cheatsheet (hashnode.dev) Nginx日志配置详解_biubiuli的博客-CSDN博客_nginx 日志配置
2021年12月11日
1,450 阅读
0 评论
0 点赞
2021-12-08
【踩坑实录】Github提交时出现错误:remote:Permission to xxx/test.git denied to xxx
目录: 问题再现 错误原因 解决方法 问题再现 Github 提交时出现错误,报错信息如下: remote: Permission to xxx/test.git denied to xxx. fatal: unable to access 'https://github.com/xxx/test.git/': The requested URL returned error: 403 如果再试一次,可能还会有如下报错: fatal: unable to access 'https://github.com/xxx/xxx.git/': OpenSSL SSL_read: Connection was reset, errno 10054 或者: fatal: unable to access 'https://github.com/xxx/xxx.git/': Failed to connect to github.com port 443: Timed out 错误原因 这个是由于在同一台计算机上先后使用了两个Github账号。 第一个账号进行了提交之后,这个账号的凭据信息就被保存了下来,然后切换到第二个账号进行提交时,系统依然会使用第一个账号的凭据信息进行提交,因此便会报错。 解决方法 进入控制面板,找到凭据管理器选项,选择其中的 Windows 凭据,删除已经保存的 Github 凭据: 然后再重新进行提交操作,此时会弹出Github登录窗口,重新登录之后就能成功提交了。
2021年12月08日
1,978 阅读
0 评论
0 点赞
1
2
3
4
...
17