当前位置: 首页 > news >正文

某物流网站后台源码营销企业

某物流网站后台源码,营销企业,asp 女性 美容 知识 网站 源码,微微网站建设文章目录 一、需求概述二、开发方式1、传统开发方式2、将接口视为资源文件1.)springmvc工程2.)springboot工程3.)nginx代理 三、接口数据如何更新1、原始数据文件生成接口数据1.)定义启动类2.)启动监听3.)文…

文章目录

  • 一、需求概述
  • 二、开发方式
    • 1、传统开发方式
    • 2、将接口视为资源文件
      • 1.)springmvc工程
      • 2.)springboot工程
      • 3.)nginx代理
  • 三、接口数据如何更新
    • 1、原始数据文件生成接口数据
      • 1.)定义启动类
      • 2.)启动监听
      • 3.)文件处理
      • 4.) 完整代码
    • 2、借助crontab定时执行

一、需求概述

通用查询类接口的需求,在开发过程中是比较常见的一类需求,一般具有以下的特点:

  1. 数据更新频率较低
  2. 无强制鉴权需求
  3. 短时间内数据内容固定

二、开发方式

1、传统开发方式

传统的开发方式,偏向于遵循MVC 模式使用@RestController注解来定义restful接口来进行后续开发。此开发模式大部分开发人员已经司空见惯,驾轻就熟不再详细阐述。

2、将接口视为资源文件

具体做法分为以下几种情况

1.)springmvc工程

springmvc工程配置文件一般为spring-mvc.xml,在此文件添加如下配置指向外部文件目录

	<mvc:resources mapping="/pics/**" location="file:C:\Users\DELL\Pictures\" />

注意:需要以file:绝对文件路径 方式配置

参考项目:https://gitee.com/00fly/java-code-frame/blob/master/springmvc-dbutils/

2.)springboot工程

springboot工程一般以javaCofig代码方式定义资源文件映射

@Slf4j
@Configuration
@ConditionalOnWebApplication
public class WebMvcConfig implements WebMvcConfigurer
{....../*** 加载静态资源文件或文件映射<br>* 映射路径优先级顺序为:META-INF/resources > resources > static > public*/@Overridepublic void addResourceHandlers(final ResourceHandlerRegistry registry){try{registry.addResourceHandler("/pics/**").addResourceLocations("classpath:/data/pic/");registry.addResourceHandler("/upload/**").addResourceLocations("file:" + new File("./upload/").getCanonicalPath() + "/");}catch (IOException e){log.error(e.getMessage(), e);}}

参考项目:https://gitcode.com/00fly/springboot-hello/
示例:https://00fly.online/upload/data.json

3.)nginx代理

nginx代理更方便,只需要在nginx根目录添加文件即可
典型的nginx配置文件如下:
default.conf

server {listen       80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;} 
}

我们只需在目录 /usr/share/nginx/html 放入资源文件即可。

示例:http://124.71.129.204/data.json

三、接口数据如何更新

上部分我们已经解决了接口发布和访问的问题,不要忘了:通用查询类接口仍然有数据更新的需求,我们如何来解决这个需求呢?

1、原始数据文件生成接口数据

具体概括为:监听原始数据文件,当数据发生变化时,生成接口数据文件,适用于数据不定期更新

原始数据:点击获取

1.)定义启动类


import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.stream.Collectors;
import java.util.stream.Stream;import org.apache.commons.lang3.StringUtils;import lombok.extern.slf4j.Slf4j;@Slf4j
public class MainRun
{/*** 文件监听程序一直运行* * @param args* @throws IOException*/public static void main(String[] args)throws IOException{// 默认监听项目当前目录String path = new File("").getCanonicalPath();URL url = MainRun.class.getProtectionDomain().getCodeSource().getLocation();if (url.getPath().endsWith(".jar")){log.info("please start jar like: java -jar files-listener-0.0.1.jar --path=/work/test");path = Stream.of(args).filter(arg -> arg.contains("--path")).map(arg -> StringUtils.substringAfter(arg, "=")).collect(Collectors.joining());if (StringUtils.isBlank(path) || !new File(path).exists() || !new File(path).isDirectory()){log.error("please check path is a exist directory!");return;}}FileMonitor.initJsonFilesMonitor(path);}
}

2.)启动监听


import java.io.File;
import java.util.concurrent.TimeUnit;import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;import com.fly.simple.service.JsonDataService;import lombok.extern.slf4j.Slf4j;/*** 监听文件变化*/
@Slf4j
public class FileMonitor
{/*** 初始化文件监听器*/public static void initJsonFilesMonitor(String path){try{log.info("start monitor {} ......", path);FileAlterationObserver observer = new FileAlterationObserver(path, FileFilterUtils.suffixFileFilter(".json"));File dir = new File(path);observer.addListener(new FileAlterationListenerAdaptor(){@Overridepublic void onFileCreate(File file){log.info("★★★★★★★★ {} created.", file.getName());JsonDataService.parseDir(dir);}@Overridepublic void onFileChange(File file){log.info("★★★★★★★★ {} changed.", file.getName());JsonDataService.parseDir(dir);}@Overridepublic void onFileDelete(File file){log.info("★★★★★★★★ {} deleted.", file.getName());JsonDataService.parseDir(dir);}});// 开始监听new FileAlterationMonitor(TimeUnit.SECONDS.toMillis(10), observer).start();}catch (Exception e){log.error(e.getMessage(), e.getCause());}}
}

3.)文件处理


import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;
import java.util.stream.Collectors;import org.apache.commons.io.FileUtils;import com.fly.simple.entity.Article;
import com.fly.simple.entity.BlogData;
import com.fly.simple.utils.JsonBeanUtils;import lombok.extern.slf4j.Slf4j;/*** JsonData服务类*/
@Slf4j
public class JsonDataService
{private static File dir = new File(ResourceBundle.getBundle("config").getString("out"));public static void parseDir(File directory){try{// 遍历目录下json文件Collection<File> files = FileUtils.listFiles(directory, new String[] {"json"}, false);List<Article> data = files.stream().map(f -> parseToArticles(f)).flatMap(List::stream).distinct().collect(Collectors.toList());FileUtils.writeStringToFile(dir, JsonBeanUtils.beanToJson(data, true), StandardCharsets.UTF_8, false);log.info("articles length : {}", data.size());}catch (IOException e){log.error(e.getMessage(), e);}}/*** 解析File为List* * @param resource* @return*/private static List<Article> parseToArticles(File file){try{String jsonData = FileUtils.readFileToString(file, StandardCharsets.UTF_8);return JsonBeanUtils.jsonToBean(jsonData, BlogData.class, true).getData().getList();}catch (IOException e){log.error(e.getMessage(), e);return Collections.emptyList();}}
}

4.) 完整代码

https://gitee.com/00fly/effict-side/tree/master/files-listener

2、借助crontab定时执行

具体概括为:按照设定时间点生成接口数据文件,适用于数据固定周期更新

files-listener项目根目录执行打包

mvn clean package -f pom-json.xml

执行后会在target文件目录生成files-listener-0.0.1.jar,将jar上传到服务器目录如:/work/files-listener-0.0.1.jar
命令行执行

#查看定时任务
crontab -l#编辑定时任务
crontab -e

编辑时输入以下内容

0 */12 * * * java -jar /work/files-listener-0.0.1.jar

此命令实现,每12小时执行一次Jar

不再详细阐述,实现思路具体请查阅文章:服务器docker应用一览


有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

http://www.khdw.cn/news/11480.html

相关文章:

  • 网站建设和优化排名北京本地网络推广平台
  • 网站建设 镇江seo查询排名软件
  • 荣成市信用建设官方网站新东方烹饪培训学校
  • 做企业网站进行推广要多少钱管理培训班
  • 吉祥又聚财的公司名字百度seo优化公司
  • ps 矢量素材网站百度推广官网
  • 谁做网站收录网络优化大师手机版
  • 做视频网站收入关键词seo排名优化如何
  • 网站首页的head标签内谷歌浏览器下载app
  • 北京给公司做网站多少钱晋中网络推广
  • 企业网站备案要求2023年9月疫情又开始了吗
  • 成都网站建设四川冠辰科技站长工具seo下载
  • 湖北网站推广公司技巧网站设计公司有哪些
  • 徐州公司网站制作企业网络营销推广方案策划范文
  • 上海影城改造升级昆明seo关键字推广
  • 网站调用网页怎么做网站推广方式有哪些
  • ps软件网站有哪些功能关键词挖掘查询工具爱站网
  • 公司网站设计案例公司做网站推广
  • 西安有哪些网站建设外包公司报个电脑培训班要多少钱
  • 网站制作维护发票郑州短视频代运营公司
  • WordPress主题DIY插件东莞seo推广
  • 兼职网站制作竞价推广的企业
  • 防录屏网站怎么做经济新闻最新消息财经
  • 中国合伙人2做的什么网站小说排行榜百度
  • 做响应式网站的微博号站长统计app进入网址
  • 自助下单网站惠州网站营销推广
  • 杭州响应式网站建设广告投放都有哪些平台
  • 网站管理系统制作自动外链
  • 曲阳县做网站淘宝指数查询入口
  • 那个网站教做菜做的好厦门seo全网营销