成都学网站建设费用,杭州精品课程网站建设,公司管理系统软件有哪些,百度seo排名曝光行者seo接上次博客#xff1a;JavaEE进阶#xff08;13#xff09;案例综合练习——博客系统-CSDN博客
目录
程序配置文件修改和打包
构建项目并打包
分平台配置
数据准备
上传jar包到云服务器并运行
开放端口号
验证程序
如何查看日志得到报错信息
常见问题 关于Linux基…接上次博客JavaEE进阶13案例综合练习——博客系统-CSDN博客
目录
程序配置文件修改和打包
构建项目并打包
分平台配置
数据准备
上传jar包到云服务器并运行
开放端口号
验证程序
如何查看日志得到报错信息
常见问题 关于Linux基本使用和环境搭建云服务器配置可以参考我之前的博客已经写的很详细了初阶JavaEE17Linux 基本使用和 web 程序部署-CSDN博客
程序配置文件修改和打包 接着我们的上篇博客现在我们把它部署到云服务器上。
首先我们需要修改一下.yml的配置你需要把这里面的MySQL的密码修改成云服务器的密码 并且我们可以把打印日志的语句注释掉了 我们再加上一个配置日志的内容方便我们后续观察日志
# 应用服务 WEB 访问端口
server.port: 8080# 下面这些内容是为了让 MyBatis 映射
# 指定 MyBatis 的 Mapper 文件
mybatis.mapper-locations: classpath:mappers/*xml
# 指定 MyBatis 的实体目录
mybatis.type-aliases-package: com.example.mybatisstudy.mybatis.entity# 数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncodingutf8useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivermybatis:configuration: # 配置打印 MyBatis⽇志# log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换mapper-locations: classpath:mapper/**Mapper.xmllogging:file:name:spring-blog.log
构建项目并打包
接下来就是打包 注意一定要确保自己的pom.xml里面包含了这个插件 plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationmainClasscom.example.newblogsystem.NewBlogSystemApplication/mainClass/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin
可以去中央仓库下载。
先点击clean再点击package。 注意非专业版的双击Maven下面的package就行了很容易找到。 打包失败。这是因为我们为了部署jar包修改了配置文件。但是修改完配置文件之后Test运行失败导致打包失败。
那你说把密码改回去
不行啊这样我们打的包里面密码就不对了扔到云服务器上无法运行啊。
我们只能选择跳过Test 非专业版的样子稍有不同是个闪电。 这样就打包成功了。
包的地址他也告诉你了。 但是你有没有觉得手动打包真的很麻烦
一旦我们需要对程序进行修改就需要重新打一次包。
我们希望的是不同的平台去帮我们执行不同的配置比如开发环境是一个配置文件线上环境是一个配置文件还有测试环境、预发布环境……
那么我们就需要“分平台配置”。
分平台配置
当谈到分平台配置时通常涉及到软件开发、系统部署或网络架构等方面 软件开发在开发软件时开发人员通常会面临不同的目标平台比如不同的操作系统如Windows、Linux、macOS、不同的硬件架构如x86、ARM、不同的编程语言或框架如Java、Python、Node.js。针对不同的平台可能需要进行不同的配置和优化以确保软件能够在各种环境中正确运行和高效执行。 系统部署在部署应用程序或服务时可能会涉及到不同的部署环境比如本地服务器、云平台如AWS、Azure、Google Cloud、容器化平台如Docker、Kubernetes等。针对不同的部署环境可能需要不同的配置文件、环境变量设置或者部署脚本以确保应用程序能够在各种环境中正确部署和运行。 网络架构在构建网络架构时可能会涉及到多种不同的网络设备和协议比如路由器、交换机、防火墙、负载均衡器等。针对不同的网络设备和协议可能需要不同的配置和调整以确保网络能够稳定运行并满足性能要求。
总之分平台配置是指我们可以根据不同的平台或环境来进行定制化的配置和优化以确保软件、系统或网络能够在各种环境中正常运行并达到最佳性能。这种配置工作通常需要开发人员、系统管理员或网络工程师来完成他们需要对不同平台的特性和要求有深入的了解并采取相应的措施来适配和优化。
我们先多复制几个配置文件 开发环境里面的放置我们最开始的配置线上环境的放置我们刚刚修改完成后的配置。
但是Tomcat只认application.yml这一个配置文件我们要怎么告诉它我们想要怎么运行呢
直接在 application.yml里面规定就好了。
在主配置文件 application.yml 中指定配置文件并删除数据库相关配置
spring:profiles:active: dev 我们看看配置成功与否。 打包成功。
但是注意文件的命名规则必须按照application-xxx.yml的格式命名。
当然还是觉得麻烦的话你也可以在pom.xml里面进行Maven的自定义配置 profilesprofileiddev/id
!-- 自定义配置--propertiesprofile.namedev/profile.name/properties/profileprofileidprod/id!-- 自定义配置--propertiesprofile.nameprod/profile.name/properties/profile/profiles
运行之后 这样以后我们打包就很简单了只需要在右边点击一下。
然后再次修改application.yml
spring:profiles:active: profile.name
我们选择不跳过Test运行 这样从侧面反应我们配置成功了。
不信的话运行一下dev 好了现在我们重新打包 数据准备
-- 建表SQL
CREATE DATABASE IF NOT EXISTS java_blog_spring CHARSET utf8mb4;
USE java_blog_spring;
-- 用户表
DROP TABLE IF EXISTS java_blog_spring.user;
CREATE TABLE java_blog_spring.user (id INT NOT NULL AUTO_INCREMENT,user_name VARCHAR(128) NOT NULL,password VARCHAR(128) NOT NULL,github_url VARCHAR(128) NULL,delete_flag TINYINT(4) NULL DEFAULT 0,create_time DATETIME DEFAULT NOW(),update_time DATETIME DEFAULT NOW(),PRIMARY KEY (id),UNIQUE INDEX user_name_UNIQUE (user_name ASC)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;-- 博客表
DROP TABLE IF EXISTS java_blog_spring.blog;
CREATE TABLE java_blog_spring.blog (id INT NOT NULL AUTO_INCREMENT,title VARCHAR(200) NULL,content TEXT NULL,user_id INT(11) NULL,delete_flag TINYINT(4) NULL DEFAULT 0,create_time DATETIME DEFAULT NOW(),update_time DATETIME DEFAULT NOW(),PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT博客表;-- 新增用户信息
INSERT INTO java_blog_spring.user (user_name, password, github_url) VALUES (神圣的管理员SAMA, a72bc4c673f7404f8d4342fb4b91e42e6735b80aadf34d80afad625b3a37cf3c);
INSERT INTO java_blog_spring.user (user_name, password, github_url) VALUES (狂气兔子, 96bd56fa240d42078534534594d00dbb024bce4adb9c6dade636518c15ae2c0b);
INSERT INTO java_blog_spring.blog (title, content, user_id) VALUES (我正在进行程序部署测试1, 111我是博客正文我是博客正文我是博客正文, 1);
INSERT INTO java_blog_spring.blog (title, content, user_id) VALUES (我正在进行程序部署测试1, 222我是博客正文我是博客正文我是博客正文, 1);
但是注意这里有一个问题就是我们的密码已经是加密过的了你需要到上次我们写的MD5测试类里面给密码进行加密替换掉我们刚刚的SQL语句中的密码否则它会报错。
你也可以这样修改
UPDATE java_blog_spring.user
SET password a72bc4c673f7404f8dad1gda4b91e42e6735b80aadf74580afad625b3a37cf3c
WHERE id 1;UPDATE java_blog_spring.user
SET password 96bd56fa240d42078549430994d00dbb023524addb9c6dade636518c15ae2c0b
WHERE id 2;
好了直接把SQL语句SHIFTINSERT粘贴进来 上传jar包到云服务器并运行 然后我们先不关闭数据库另外开一个窗口 把我们的打好的包拖进来 注意你的包大小至少是30、40MB左右的大小太小的话很有可能是pom.xml出了问题没有正确引入依赖等等一定要回去找问题重新打包
我的血泪史 自己可以选一个存放的路径然后把jar包拖进来 然后我们就可以运行这个程序了
java -jar NewBlogSystem-0.0.1-SNAPSHOT.jar好了我们继续。
开放端口号
如果外网需要访问该服务需要先在服务器防火墙中开放相应的端口号。本着保障服务器安全的原则云服务器上的端口非必要情况下不开放。
例如常见的端口号如数据库的3306端口、Redis的6379端口等应尽可能避免直接开放而是可以考虑采用其他方式进行连接比如配置隧道的方式。
以腾讯云服务器举例
进⼊防火墙管理界面 添加规则
端口号写需要开放的端口号多个端口号以逗号分割. 验证程序 接下来我们把端口号复制到网页看看我们的博客系统 看上去是成功了我们测试每一个功能也都没有问题。
如何查看日志得到报错信息
上面的一切可能都不会太顺利因为每台电脑配置、环境都不一样即使代码一模一样在不同的环境里面运行得到的结果也可能天差地别。
当我们的程序运行出错了我们就需要去查看日志里面隐藏着报错信息。
我们一开始添加了 logging:file:name:spring-blog.log在application.yml里面就是为了方便查看日志。
在Xshell中查看日志通常使用的命令:
less: 用于逐页查看文件内容可以向上或向下滚动查看文件内容并支持搜索、定位等功能。less filename.logmore: 类似于 less也用于逐页查看文件内容但不支持向上滚动或搜索只能向下逐页查看。more filename.logvim: 是一个文本编辑器但也可以用于查看文件内容。在命令模式下输入 :e filename.log 即可打开文件并查看其内容。
但是这些都不是最常用的最方便的应该是tail -f filename.log tail: 用于显示文件的末尾内容将实时显示日志文件filename.log的最新内容。 -f 参数表示“跟踪”即持续监视文件的增长我们就可以实时查看新的日志内容。
你甚至可以查找指定的日志信息
tail -f filename.log |grep ERROR
这个命令的目的是实时查看日志文件 filename.log 的最新内容并筛选出包含 ERROR 关键字的行。其中tail -f 用于实时跟踪文件的增长而 grep ERROR 用于筛选出包含 ERROR 关键字的行。通过将这两个命令组合起来我们可以实时查看文件的最新内容并且只关注包含 ERROR 关键字的行。
另外| 代表管道Pipeline。管道是一种在Unix和类Unix系统中用于进程间通信的机制。在Linux指令中管道可以使用竖线符号 | 作为管道标记。它的作用是将一个命令的标准输出作为另一个命令的标准输入。这种机制使得多个命令可以通过管道连接起来形成一个流水线每个命令都可以处理前一个命令的输出从而实现复杂的数据处理和操作。
例如我们提到的 tail -f filename.log | grep ERROR 就是一个典型的管道用法它将 tail -f filename.log 的输出即实时查看日志文件的最新内容传递给 grep ERROR 命令然后 grep 命令会筛选出包含 ERROR 关键字的行并将其输出显示在终端上。
需要注意的是如果 filename.log 中的内容不是文本而是二进制文件可能无法直接使用 grep 命令。
常见问题
当我们测试完成之后直接断开对话再打开 这个时候我们需要思考为什么会出现这种问题
服务未启动或者端口未开放。
查找进程里面有Java出现的地方 为什么没有启动呢因为我们刚刚是非后台启用的一关闭对话进程就被杀死了。
我们真正应该采用的命令是这个——后台启动nohup java -jar name 注意“”不可省略
我们现在把窗口关掉
但是这种做法也存在着弊端比如我们突然发现程序还有需要修改的地方但是这个时候再次重复之前的步骤然后启动程序
端口号冲突 原因是后台启动的程序重新发布时必须先把之前的进程杀掉。
之前的进程未杀掉会造成端口号冲突。
这个时候我们有两种选择
1、修改端口号 但是你得去开放相关端口号。
2、杀死进程。
有两种语句可以查看占用端口号的进程 也可以像之前那样搜索包含了Java的进程 最后杀死进程就是直接输入kill 进程PID或者 kill -9 进程ID。
kill -9 命令是用来强制终止一个进程的其中的 9 表示信号编号代表 SIGKILL 信号。SIGKILL 是一个特殊的信号用来立即终止目标进程而不管目标进程的状态如何。这个命令通常用来应对无法通过常规方式终止的进程比如卡死的程序或者僵尸进程。
在执行 kill -9 进程ID 命令时操作系统会发送 SIGKILL 信号给指定进程从而立即终止该进程。需要注意的是使用 SIGKILL 信号终止进程会直接结束进程而不会给进程执行清理工作的机会因此慎用此命令可能会导致数据丢失或者其他不良后果。 最后如果你的程序启动了那么怎么确认是不是端口未开放
可以输入curl http://127.0.0.1:9090/blog_login.html
注意这里的端口号因为还在测试本机。 像这样拿到了相关网页信息就可以确定你本机的应用启动成功了。
这个时候你就要去考虑有没有正确开发端口号防火墙有没有处理