
SpringBoot
文章平均质量分 80
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
终于有人把 SpringBoot 项目的Http客户端工具说清楚了!
大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么可以尝试使用Retrofit。retrofit-spring-boot-starter实现了Retrofit与spring-boot框架快速整合,并且支持了部分功能增强,从而极大的简化spring-bo转载 2020-10-14 17:36:17 · 861 阅读 · 0 评论 -
Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
无侵入式 统一返回JSON格式其实本没有没打算写这篇博客的,但还是要写一下写这篇博客的起因是因为,现在呆着的这家公司居然没有统一的API返回格式?,询问主管他居然告诉我用HTTP状态码就够用了(fxxk),天哪HTTP状态码真的够用吗?在仔细的阅读了项目源码后发现,在API请求的是居然没有业务异常(黑人问好)。好吧 居然入坑了只能遵照项目风格了,懒得吐槽了。因为项目已经开发了半年多了, 要是全部接口都做修改工作量还是挺大的, 只能用这种无侵入式的方案来解决.“项目源代码: https://转载 2020-09-08 11:27:14 · 1967 阅读 · 2 评论 -
总在说 Spring Boot 内置了 Tomcat 启动,那它的原理你说的清楚吗?
前言不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?内置tomcat开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty。<dependency><groupId>org.springframework.boot</groupId><artifactId>...转载 2020-08-25 16:04:08 · 245 阅读 · 0 评论 -
项目实践:Spring Boot 三招组合拳,手把手教你打出优雅的后端接口
前言一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范!本文就一步一步演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松。在文章末尾贴上了项目演示的github地址,clone下来即可运行转载 2020-08-18 17:58:54 · 189 阅读 · 0 评论 -
只需 4 步,自己搞个 Spring Boot Starter!
引言只要你用Springboot,一定会用到各种spring-boot-starter。其实写一个spring-boot-starter,仅需4步。下面我们就写一个starter,它将实现,在日志中打印方法执行时间。“推荐一个艿艿写的 6000+ Star 的 SpringBoot + SpringCloud + Dubbo 教程的仓库:https://github.com/YunaiV/SpringBoot-Labs第一步 创建maven项目在使用spring-boot-starter转载 2020-08-17 15:48:48 · 191 阅读 · 0 评论 -
Spring Boot 中的 RestTemplate 不好用?试试 Retrofit!
大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofit。retrofit-spring-boot-starter实现了Retrofit与spring-boot框架快速整合,并且支持了部分功能增强,从而极大的简化s..转载 2020-08-13 13:35:40 · 269 阅读 · 0 评论 -
Spring Boot 微信点餐开源系统
架构前后端分离:Nginx与Tomcat的关系在这篇文章,几分钟可以快速了解:“https://www.jianshu.com/p/22dcb7ef9172补充: setting.xml 文件的作用:settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。 maven的作用:借助Maven,可将jar包仅仅保存在“仓库”中,有需要该文件时,..转载 2020-08-12 09:41:19 · 286 阅读 · 0 评论 -
基于 Spring Boot 的车牌识别系统(附项目地址)ba
gitee开源地址“https://gitee.com/admin_yu/yx-image-recognition嘿嘿,胖友给艿艿的 https://github.com/YunaiV/SpringBoot-Labs 仓库点个 Star 吧,具体 100000 只差 4000 个了,分分钟~介绍 spring boot + maven 实现的车牌识别及训练系统 基于java语言的深度学习项目,在整个开源社区来说都相对较少;而基于java语言实现车牌识别EasyPR-Java项转载 2020-08-11 21:38:22 · 282 阅读 · 0 评论 -
Spring Boot 中 @EnableXXX 注解的驱动逻辑探讨
作者 |温安适来源 |https://juejin.im/post/5efdd689e51d4534af686ca9工作中经常用到,如下注解: @EnableEurekaClient @EnableFeignClients @EnableCircuitBreaker @EnableHystrix 他们都是@Enable开头,各自实现不同的功能,解析这种@Enable的逻辑是什么呢?@Enable驱动逻辑找入口@Enable的模块驱动,依赖于...转载 2020-08-03 10:30:56 · 283 阅读 · 0 评论 -
SpringBoot +RabbitMQ 做智能家居,居然如此简单!
前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。智能可燃气体报警器产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话、短信、微信等方式,提醒用户家中可能有气体泄漏。用户还可能向报警器发一些关闭报警、调整音量的指令等。整体功能还是比较简单的,大致的逻辑如下图所示:但当我真正的参与其中开发时,其实有一点小小的失望,因为在整个研发过程中,并没用到什么新的技术,还是常规的几种转载 2020-07-24 13:49:43 · 421 阅读 · 0 评论 -
So easy!Nginx+SpringBoot 实现负载均衡
在介绍Nginx的负载均衡实现之前,先简单的说下负载均衡的分类,主要分为硬件负载均衡和软件负载均衡,硬件负载均衡是使用专门的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,比如F5,在数据的稳定性以及安全性来说非常可靠,但是相比软件而言造价会更加昂贵;软件的负载均衡以Nginx这类软件为主,实现的一种消息队列分发机制。简单来说所谓的负载均衡就是把很多请求进行分流,将他们分配到不同的服务器去处理。比如我有3个服务器,分别为A、B、C,然后使用Nginx进行负载均衡,使用轮询策略,此时如果收到了9个转载 2020-07-18 11:30:15 · 271 阅读 · 0 评论 -
Spring Boot 项目如何做性能监控?
来源:zhaoyh's blog,http://zhaoyh.com.cn/Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量,Spring Boot提供了 actuator 模块,可以很方便的对你的 Spring Boot 程序做监控。1. actuator接口说明Spring Boot 应用中加入监控很简单,只需要在pom.xml文件中加入以下依赖:<dependency><groupId>org.sp...转载 2020-07-16 19:56:26 · 2088 阅读 · 0 评论 -
Spring Boot 项目瘦身指南,瘦到不可思议!
一、前言SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(Spring Cloud等),那就更大了。这个时候如果想要对线上运行工程有一些微调,则非常痛苦。二、瘦身前的Jar包Tomcat在部署Web工程的时候,可以进行增量更新,Spring Boot也是可以的~SpringBoot编译出来的Jar包中,磁盘占用大的,是一些外部依赖库(jar包),例如:进入项目工程根目..转载 2020-07-04 17:03:16 · 373 阅读 · 0 评论 -
Spring Boot 应用如何提高服务吞吐量?
背景生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。方案1、undertow替换tomcat电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤:1、增加pom配置<dependency><groupid>org.springframework.boot</groupid><artif...转载 2020-06-29 19:04:38 · 487 阅读 · 0 评论 -
Spring Boot 把 Maven 干掉了,正式拥抱 Gradle!
在国外某社交网站上有一个关于迁移 Spring Boot 迁移 Maven 至 Gradle 的帖子:该贴子上也有很多人质疑:Maven 用的好好的,为什么要迁移至 Gradle?虽然该贴子只是说 Gradle 牛逼,但并没有说迁移至 Gradle 所带来的影响和价值。所以,Spring Boot 官方对此也发了博文作了解释:https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle栈长简单概转载 2020-06-17 15:12:59 · 394 阅读 · 0 评论 -
面试:Spring Boot 中的条件注解底层是如何实现的?
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation)。比如@ConditionalOnBean、@ConditionalOnClass、@ConditionalOnExpression、@ConditionalOnMissingBean等。条件注解存在的意义在于动态识别(也可以说是代码自动化执行)。比如@ConditionalOnClass会检查类加载器中是否存在对应的类,如果有的话被注解修饰的类就有资格被Spring容器所注册,否则会被skip。比如F转载 2020-06-16 21:54:13 · 380 阅读 · 0 评论 -
Spring Boot 配置详解
springboot默认加载配置SpringBoot使用两种全局的配置文件,全局配置文件可以对一些默认配置进行修改。 application.properties application.yml 这两个配置文件使我们springboot启动的时候回默认加载的配置文件。配置文件放在src/main/resources目录或者类路径/config下,这个配置文件的路径是有优先级的,至于优先级后面再说。首先这两个文件中properties这个文件不需要多说使我们经常使用的资源文件,转载 2020-06-15 19:46:08 · 293 阅读 · 0 评论 -
Spring 和 Spring Boot 最核心的 3 大区别,详解!
概述对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了SpringBoot很久的同学来说,还不是很理解SpringBoot到底和Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!什么是Spring作为Java开发人员,大家都Spring都不陌生,简而言之,Spring框架为开发Java应用程序提供了全面的基础架构支持。它包含一些很好的转载 2020-06-12 20:45:49 · 275 阅读 · 0 评论 -
硬核艿艿,新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!
“摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/jar/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MANIFEST.MF 3. JarLauncher 4. LaunchedURLClassLoader 666. 彩蛋 大家好,我是艿艿,一个熬夜退役选手~这两周很不顺心,接连的变化,一脸的懵逼。还好我还有 150000 女粉,我又充满能量的肝完了本文。1. 概述Spring Boo转载 2020-06-06 14:25:01 · 359 阅读 · 0 评论 -
SpringBoot + RabbitMQ (保证消息100%投递成功并被消费)
一、先扔一张图说明:本文涵盖了关于RabbitMQ很多方面的知识点, 如: 消息发送确认机制 消费确认机制 消息的重新投递 消费幂等性, 等等 这些都是围绕上面那张整体流程图展开的, 所以有必要先贴出来, 见图知意二、实现思路 简略介绍163邮箱授权码的获取 编写发送邮件工具类 编写RabbitMQ配置文件 生产者发起调用 消费者发送邮件 定时任务定时拉取投递失败的消息, 重新投递 各种转载 2020-06-05 12:29:58 · 410 阅读 · 0 评论 -
瞬间几千次的重复提交,我用 Spring Boot + Redis 扛住了!
前言:在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段: 数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据 token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断toke转载 2020-06-03 13:35:55 · 298 阅读 · 0 评论 -
Spring 和 Spring Boot 之间到底有啥区别?
概述对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累、我慢慢理解了这两个框架到底有什么区别,相信对于用了SpringBoot很久的同学来说,还不是很理解SpringBoot到底和Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法!什么是Spring作为Java开发人员,大家都Spring都不陌生,简而言之,Spring框架为开发Java应用程序提供了全面的基础架构支持。它包含一些很好的转载 2020-06-03 13:33:15 · 244 阅读 · 0 评论 -
Spring Boot“内存泄漏”?看看美团大牛是如何排查的
为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize=128m -XX:InitialCodeCacheSiz转载 2020-06-01 10:42:25 · 497 阅读 · 0 评论 -
Spring Boot 密码加密的 2 种姿势!
先说一句:密码是无法解密的。密码无法解密,还是为了确保系统安全。今天松就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全。1.为什么要加密2011 年 12 月 21 日,有人在网络上公开了一个包含 600 万个某网站用户资料的数据库,数据全部为明文储存,包含用户名、密码以及注册邮箱。事件发生后该网站在微博、官方网站等渠道发出了声明,解释说此数据库系 2009 年备份所用,因不明原因泄露,已经向警方报案,后又在官网发出了公开道歉信。在接下来的十多天里,金山、网易、京东、当当转载 2020-06-01 09:17:04 · 803 阅读 · 0 评论 -
Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!
本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作; profiles指定不同环境的配置 maven-assembly-plugin打发布压缩包 分享shenniu_publish.sh程序启动工具 linux上使用shenniu_publish.sh启动程序 profiles指定不同环境的配置通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可转载 2020-05-28 10:57:54 · 476 阅读 · 0 评论 -
spring-boot:run 是怎么运行 Spring Boot 项目的?
初学 SpringBoot 的时候,按照官方文档,都是建立了一个项目之后,然后执行mvn spring-boot:run就能把这个项目运行起来。我就很好奇这个指令到底做了什么,以及为什么项目里包含了 main 方法的那个class,要加一个@SpringBootApplication的注解呢?为什么加了这个注解@SpringBootApplication之后,mvn spring-boot:run指令就能找到这个class并执行它的main方法呢?首先我注意到,用maven新建的sp...转载 2020-05-22 18:57:07 · 557 阅读 · 0 评论 -
Spring Boot 监听 Redis Key 失效事件实现定时任务
业务场景我们以订单功能为例说明下:生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是每个订单的创建时间不一样,定时任务的规则无法设定,如果将定时任务执行的间隔设置的过短,太影响效率。还有一种想法,在用户进入订单界面的时候,判断时间执行相关操作。方式可能有很多,在这里介绍一种监听 Redis 键值对过期时间来实现订单自动关闭。实现思路在生成订单时,向 Redis 中增加一个 KV 键值对,K 为订单号,保证通过 K 能定位到数据库中的某个订单即可,V 可为任意值。假设,生转载 2020-05-19 19:22:04 · 797 阅读 · 0 评论 -
绝了!Dataway让 SpringBoot 变得更强大!
作者:哈库纳 来源:my.oschina.net/ta8210/blog/3234639Dataway介绍Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。这种内嵌集成方式模式的优点是,可以..转载 2020-05-14 08:44:12 · 1482 阅读 · 0 评论 -
快夸我!我把SpringBoot项目从18.18M瘦身到0.18M!
作者:yjgithub来源:http://39sd.cn/EF359目录:1.前言2.瘦身前的Jar包3.解决方案一、前言SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud等),那就更大了。这个时候如果想要对线上运行工程有一些微调,则非常痛苦二、瘦身前的Jar包Tomcat在部署Web工程的时候,可以进...转载 2020-05-10 16:49:22 · 375 阅读 · 0 评论 -
基于 Spring Boot 的 Restful 风格实现增删改查
前言在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便、快捷。但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练。不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot。在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博...转载 2020-04-25 10:53:17 · 541 阅读 · 0 评论 -
Spring Boot 发邮件和附件,超实用!
Spring Boot集成邮件服务竟如此简单,快速掌握邮件业务类的核心逻辑和企业邮件的日常服务。什么是SMTP?SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。什么是IMAP?...转载 2020-04-22 21:59:47 · 802 阅读 · 0 评论 -
Spring Boot 项目 RedisTemplate 实现轻量级消息队列
背景公司项目有个需求, 前端上传excel文件, 后端读取数据、处理数据、返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没人愿意傻等, 由于项目暂未使用ActiveMQ等消息队列中间件, 而redis的lpush和rpop很适合作为一种轻量级的消息队列实现, 所以用它完成此次功能开发一、本文涉及知识点 exc...转载 2020-04-21 17:03:42 · 692 阅读 · 2 评论 -
Spring Boot 多模块项目实践(附打包方法)
序言:比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。接下来,本文将重点阐述SpringBoot在Maven环境的多模块构建过程。本项目传送门:SpringBoot-Integration一、创建聚合父工程 首先使用 Spring Init...转载 2020-04-20 14:20:32 · 885 阅读 · 0 评论 -
Spring Boot 数据库连接池入门
本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs 的 lab-19 目录。原创不易,给点个 Star 嘿,一起冲鸭!1. 概述在我们的项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。 HikariCP ,号称性能最好的数据库连接池。...转载 2020-04-20 14:03:49 · 4490 阅读 · 0 评论 -
开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,也是Java开发人员不得不掌握的技术,今天给大家整理了13个优质 Spring Boot 开源项目给大家参考,希望能够帮助到正在学习 Spring Boot 的小伙伴!小伙伴简历中不知道写什么项目的或者项目没有亮点的,我只能帮你们到这了!下边的项目排名不分先后!一、mallstar 数 12.7k,项目地址:https...转载 2020-04-14 20:12:56 · 220 阅读 · 0 评论 -
Spring Boot MongoDB 入门
1. 概述可能有一些胖友对 MongoDB 不是很了解,这里我们引用一段介绍:FROM 《分布式文档存储数据库 MongoDB》MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是他支持的查询语言非...转载 2020-04-07 21:33:12 · 653 阅读 · 0 评论 -
给你的SpringBoot做埋点监控--JVM应用度量框架Micrometer
作者:云扬四海cnblogs.com/rolandlee/p/11343848.htmlJVM应用度量框架Micrometer实战前提spring-actuator做度量统计收集,使用Prometheus(普罗米修斯)进行数据收集,Grafana(增强ui)进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为”埋点”。SpringBoot中的依赖...转载 2020-04-07 21:29:32 · 1324 阅读 · 0 评论 -
Spring Boot 整合 Netty(附源码)
前言本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容。Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不再过多细说了。Protobuf介绍protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java...转载 2020-04-07 21:23:07 · 418 阅读 · 0 评论 -
SpringBoot 操作 ElasticSearch 详解(万字长文)
一、ElasticSearch 简介1、简介ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch 用于云计算中,能够达到实时搜索,稳定...转载 2020-04-06 21:04:53 · 440 阅读 · 0 评论 -
Spring Boot Elasticsearch 入门
1. 概述如果胖友之前有用过 Elasticsearch 的话,可能有过被使用的 Elasticsearch 客户端版本搞死搞活。如果有,那么一起握个抓。所以,我们在文章的开始,先一起理一理这块。Elasticsearch(ES)提供了两种连接方式: transport :通过 TCP 方式访问 ES 。 对应的库是org.elasticsearch.client.tran...转载 2020-04-03 17:59:25 · 630 阅读 · 0 评论