使用springboot每日推送早安问候语到用户微信【部署篇】
创始人
2024-01-29 01:15:29
0

上一篇介绍文章

上一篇介绍文章

https://blog.csdn.net/weixin_45206218/article/details/127872136

代码仓库

代码仓库

https://gitee.com/stevezhaozps/daily-weather

前期准备

  • 一台云服务器
  • 云服务器安装MySQL8.x
  • 云服务器安装jdk8

数据库初始化

由于本项目使用的是springdatajpa,所以不需要我们手动建表,只需要建数据库启动项目,会自动建表

CREATE DATABASE daily_weather;

这里提供数据库备份

/*Navicat Premium Data TransferSource Server         : win11Source Server Type    : MySQLSource Server Version : 50740 (5.7.40-log)Source Host           : localhost:3306Source Schema         : daily_weatherTarget Server Type    : MySQLTarget Server Version : 50740 (5.7.40-log)File Encoding         : 65001Date: 17/11/2022 15:03:50
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info`  (`id` bigint(20) NOT NULL,`bir_time` datetime NULL DEFAULT NULL,`city` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,`create_time` datetime NULL DEFAULT NULL,`district_id` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,`nickname` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,`scq_time` datetime NULL DEFAULT NULL,`type` int(11) NULL DEFAULT NULL,`update_time` datetime NULL DEFAULT NULL,`wechat_id` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

项目配置

如何申请见上一篇文章

server:port: 43310
# 微信配置
tencent:wechat:appId: 微信申请appidappSecret: 微信申请appSecret# 模板消息集合templatelist:- type: 1templateId: 模板id- type: 2templateId: 模板id- type: 3templateId: 模板id
# 百度天气配置
baidu:server: https://api.map.baidu.comak: 百度申请的ak
# 天行数据
tianxin:server: http://api.tianapi.comkey: 天行数据的key
spring:mvc:pathmatch:matching-strategy: ant_path_matcherdatasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/daily_weather?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: 数据库用户password: 数据库密码hikari:minimum-idle: 5# 空闲连接存活最大时间,默认600000(10分钟)idle-timeout: 180000# 连接池最大连接数,默认是10maximum-pool-size: 10# 此属性控制从池返回的连接的默认自动提交行为,默认值:trueauto-commit: true# 连接池名称pool-name: MyHikariCP# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟max-lifetime: 1800000# 数据库连接超时时间,默认30秒,即30000connection-timeout: 30000connection-test-query: SELECT 1jpa:show-sql: true # 默认false,在日志里显示执行的sql语句database: mysqldatabase-platform: org.hibernate.dialect.MySQL5Dialecthibernate:ddl-auto: update #指定为update,每次启动项目检测表结构有变化的时候会新增字段,表不存在时会 新建,如果指定create,则每次启动项目都会清空数据并删除表,再新建naming:#指定jpa的自动表生成策略,驼峰自动映射为下划线格式7implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl#physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# 日志
#logging:
#  config: classpath:logback-spring-dev.xml

项目结构介绍

在这里插入图片描述

  • advice : 负责统一封装处理前端返回数据格式
  • common : 统一结果封装
  • config: 项目配置
  • domain: 实体类
  • enums: 服务状态枚举类
  • exception: 异常处理和自定义异常
  • job: 定时任务
  • remote: 第三方接口调用,使用openfeign
  • repository: 数据库操作层,dao/mapper层
  • rest: 视图控制层
  • service: 业务处理层

统一结果封装
注意返回String类型需要特殊处理

package com.zhao.wechat.advice;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhao.wechat.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/*** 对前端响应结果统一封装*/
@Slf4j
@RestControllerAdvice(basePackages = {"com.zhao.wechat.rest"})
public class ApiResponseAdvice implements ResponseBodyAdvice {/*** 打印统一请求响应规范*/ApiResponseAdvice(){log.info("启动请求统一响应规范... ...");}/*** 判断是否需要对返回值进行封装* @param returnType the return type* @param converterType the selected converter type* @return*/@Overridepublic boolean supports(MethodParameter returnType, Class> converterType) {// 如果返回的结果是Result.class类型就不用封装if (returnType.getParameterType().equals(Result.class)){return false;}return true;}/*** 对返回前端的值统一封装* @param body the body to be written* @param returnType the return type of the controller method* @param selectedContentType the content type selected through content negotiation* @param selectedConverterType the converter type selected to write to the response* @param request the current request* @param response the current response* @return*/@Overridepublic Object beforeBodyWrite(Object body,MethodParameter returnType,MediaType selectedContentType,Class> selectedConverterType,ServerHttpRequest request,ServerHttpResponse response) {if (returnType.getParameterType().equals(String.class)){// 如果是String类需要特殊处理ObjectMapper objectMapper = new ObjectMapper();try {// 设置响应数据格式为jsonresponse.getHeaders().add("content-type","application/json;charset=UTF-8");return objectMapper.writeValueAsString(Result.success(body));} catch (JsonProcessingException e) {throw new RuntimeException(e);}}return Result.success(body);}} 

项目打包

  • 找到maven
  • 先点clean清理,再点package打包
    在这里插入图片描述
    在target找到jar包,准备上传到云服务器
    在这里插入图片描述

项目部署

xftp 上传文件 + xshell

通过xftp上传到云服务器

在这里插入图片描述

xshell执行jar

切换到当前jar目录下

# 启动
java -jar daily-weather-1.0.0.jar >/dev/null 2&1 &
# 启动成功会出现log目录,cd到log目录下可查看项目运行日志,有无报错# 查看项目是否在运行
ps -ef | grep daily-weather-1.0.0.jar
# 可看到线程的pid
kill -9 pid号,可以杀死当前运行的项目

通过swagger访问

正常启动成功后,使用公网ip:端口/doc.html可以访问swagger页面

相关内容

热门资讯

骋望因高云外尽,乡关回首愧烟... “骋望因高云外尽,乡关回首愧烟萝。”出处 出自 明代 石茂华 的《九月九日登长城关》“骋望因高云外尽...
鹧鸪天西都作 赏析 鹧鸪天西都作 赏析 鹧鸪天西都作 赏析,是一篇抒发作者志向的作品,表现了词人铮铮铁骨的高洁品质。本文...
《登鹳雀楼》古诗词 《登鹳雀楼》古诗词《登鹳雀楼》古诗词1  《登鹳雀楼》原诗  白日依山尽,黄河入海流。  欲穷千里目...
小学必背古诗词80首带拼音大...   26 出塞王昌龄  qín shí míng yuè hàn shí guān  秦 时 明 月...
寸寸微云,丝丝残照,有无明灭... “寸寸微云,丝丝残照,有无明灭难消。”出处 出自 清代 贺双卿 的《凤凰台上忆吹箫·寸寸微云》“寸寸...
古诗词分类 古诗词分类大全  【诗中泪】  1、感时花溅泪,恨别鸟惊心。(杜甫《春望》)  2、人不寐,将军白发...
形容思念亲人的诗句 形容思念亲人的诗句  但愿人长久,千里共婵娟。宋.苏轼<<水调歌头>>  独上江楼思渺然,月光如水水...
“角声吹,笛声吹,吹了南枝吹... “角声吹,笛声吹,吹了南枝吹北枝。明朝成雪飞。”出自南宋词人刘克庄《长相思·惜梅》长相思·惜梅寒相催...
李商隐《柳曾逐东风拂舞筵》古... 李商隐《柳曾逐东风拂舞筵》古诗原文  【作品介绍】  《柳·曾逐东风拂舞筵》的.作者是李商隐,被选入...
衣带渐宽终不悔 “衣带渐宽终不悔”出处 出自 清代 王国维 的《人间词话七则》“衣带渐宽终不悔”平仄韵脚 拼音:yī...
浅谈红楼梦中贾宝玉性格特点 浅谈红楼梦中贾宝玉性格特点  《红楼梦》是一部经典的内容丰厚的历史作品,它塑造了众多性格鲜明的人物形...
《子夜四时歌·春歌》原文翻译... 《子夜四时歌·春歌》原文翻译赏析  【原作】  子夜四时歌·春歌——《南北朝乐府民歌》  春风动春一...
沁园春长沙写作背景 沁园春长沙写作背景  原文:  沁园春·长沙  独立寒秋,湘江北去,橘子洲头。看万山红遍,层林尽染;...
兰亭集序诗朗诵 兰亭集序诗朗诵  《兰亭集序》随作者感情的变化由平静而激荡,再由激荡而平静,极尽波澜起伏、抑扬顿挫之...
《诗经·小雅·鹤鸣》全文翻译... 《诗经·小雅·鹤鸣》全文翻译赏析  鹤鸣于九皋,声闻于天。  [译文] 鹤即使身处于低处,鸣叫声也能...
刘姥姥回乡 《红楼梦》续写 刘姥姥回乡 《红楼梦》续写  话说刘姥姥进了几次大观园后,就被大观园里的红墙绿瓦、红花绿柳给迷住了,...
《相见欢》原文及翻译 《相见欢》原文及翻译  导语:这是一首惜春词,采用的是直抒胸臆、借物抒情的手法。首句“年年”二字透露...
经典的文言文名句 经典的文言文名句  文言文是以古汉语口语为基础的书面语,在远古时代文言文与口语的差异微乎其微。下面是...
孙权劝学翻译赏析 孙权劝学翻译赏析  导语:本文是根据先前的史书改写的。因先前的史书已有较详细的记载,而又无新的史料可...
扑朔迷离出自木兰诗 扑朔迷离出自木兰诗  唧唧复唧唧,木兰当户织。不闻机杼声,惟闻女叹息。(惟闻 通:唯)  问女何所思...