秋天来了,苹果熟了。 苹果随便摘。 https://www.usreio.com/t/topic/287
最近为了引入一个包,在这个包的使用上看到了定义的依赖的一个版本号定义方式。 <dependency> <groupId>com.configcat</groupId> <artifactId>configcat-java-client</artifactId> <version>[7.0.0,)</version> </dependency> 这个定义方式有点奇怪,通常我们都是指定完整的版本号的。 解释 经过考古后才知道,Maven 是允许进行这样定义的。 根据我的理解就是 [] 和 () 各自表达的意义是不同的。 [] 有等于的意思。 () 没有等于的意思。 同时版本号使用了逗号进行分隔,我们可以想象有一个 X。 [7.0.0,),我们假设在后面插入一个 X。 那上面版本号表达的意思就是:7.0.0 <= X 上面的图片对一些常见的写法进行了说明。 https://www.ossez.com/t/maven/14106
因为项目的需要,我们使用了一个第三方的电子邮件库,但是我们希望把这个库在项目中注册成 Bean 然后随时在其他地方使用。 Configuration 在哪里注册? 我们通常可以在 Configuration 类中进行注册。 在 Configuration 类中,我们需要使用 @Configuration 这个注解。 如下图中显示的代码: @Bean public MailgunMessagesApi mailgunMessagesApi() { return MailgunClient.config(PRIVATE_API_KEY).createApi(MailgunMessagesApi.class); } 这个代码就是直接在 Configuration 类中进行了注册。 同时在这个注册中,我们使用了 Configuration 注解。 如何使用 在项目中如果需要对注册的 Bean 进行使用的话。 我们可以在需要使用的地方进行 @Autowired 就可以了。 如下面的代码: private static MailgunMessagesApi mailgunMessagesApi; @Autowired public EmailUtils(MailgunMessagesApi mailgunMessagesApi) { this.mailgunMessagesApi = mailgunMessagesApi; } 定义了一个变量,然后在构造函数中进行 Autowired 的。 使用也非常简单,在类中直接用就可以了。 https://www.ossez.com/t/spring-bean-autowired/14105
如想在部署的站点中使用 Google 广告。 我们最好需要在我们的站点中添加一个 Ads.txt 文件。 WordPress 可以使用多种方法来进行添加,最好的办法可能还是通过使用插件的方式,因为这个方式最简单也最快。 Ads.txt Manager 首先需要安装这个插件。 首先进入到你需要管理的 WordPress 后台,然后选择插件,然后通过搜索插件来进行安装。 安装完成后,需要进行激活。 进入插件 随后,选择设置菜单。 在设置菜单中可以看到我们已经安装的插件,然后选择 Ads.txt 然后将我们需要的 Ads.txt 文件复制粘贴到这个对话框中保存就可以了。 随后可以通过你的网站后面添加 ads.txt 来进行访问,确定安装正确。 如一切安装正确,提价 Google 再次验证即可。 https://www.ossez.com/t/wordpress-ads-txt/14104
分页查询在网站的设计中必不可少。 分页查询有几种方式,通常用的是:网页分页和后端分页。 不要觉得现在还有人用网页分页的方式吗? 相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。 为什么不返回上万条?那是因为后台数据库不大,只有 5 万多点的数据量。连个 Limit 都懒得用的项目还堂而皇之的上线运行了好几年到不重做差不多就没法用的地步。 我们来说说基于 Spring Data 的分页查询。 如果项目使用的是 Spring Data,那么恭喜你,这分页太方便了。 PagingAndSortingRepository 接口 首先你的实体仓库类,需要继承 PagingAndSortingRepository 这个接口。 写法也简单到只写一个继承就可以了。 PagingAndSortingRepository 接口继承于 CrudRepository 接口,拥有CrudRepository 接口的所有方法, 并新增两个功能:分页和排序。 Service Service 层也简单到不能再简单了。 假设我们希望查询一个实体类的所有数据,但是我们希望进行分页。 我们可以简单到 public Page<Visa> findAllVisa(Pageable pageable) { return visaRepository.findAll(pageable); } 只写这一段话就可以了。 我们只需要把 pageable 作为参数传递进去就行了。 Pageable 是一个接口。 定义分页对象 要对实体数据进行分页,我们需要让实体数据知道后面查询的时候是怎么分页的。 在服务层或者控制层定义一个 Pageable 对象。 if (ObjectUtils.isEmpty(searchCondition)) { Pageable visaPage = PageRequest.of(pageNumber, 100, Sort.by("dateVisaInterview").descending()); pageableResponse.setPagedData(visaService.findAllVisa(visaPage)); } 在这个对象中,我们创建了一个 visaPage 分页对象。 在这个分页对象中,我们提供了参数: 分页的当前页 每一个页面的大小 排序字段 返回 在分页查询的结果都会返回一个叫做 Page 的对象。 Page 是一个接口,继承的 Slice。 为了让程序更加简单,我们直接定义了一个返回的对象。将 Page 的内容返回到 API 上。 运行结果 如果 API 运行没有问题的话,在 API 的返回中,我们可以看到下面的信息。 针对分页查询的所有信息都有了。 包括有当前页,页大小,偏移量,总数据量。 使用 Spring Data 的分页查询,能够大大加快程序的处理,甚至能够让程序员不再关注后端是如何获得查询数据和如何进行查询的。 真的是一个非常贴心的接口。 https://www.ossez.com/t/spring-data-repository/14097
有个比较简单的问题。 Spring 的 @PostMapping 在使用 POST 提交的时候,能不能在 URL 中带参数? 简答 短回答肯定是可以的。 在非常早期的 Web 开发的时候,我们会通过网页的 JSP 来提交表单,在这个表单提交的时候,有一个非常困惑的问题就是如果不指定 POST 的提交参数。 所有的表单数据都会拼装成 URL 中参数来进行提交。 所以 POST 是肯定可以带参数的。 Spring RestController 在 Spring 的 RestController 写法也非常简单。 就和 Get 获得参数的方法是一样的。 @PostMapping("/search") @ResponseBody public ResponseEntity<?> searchVisa(@RequestBody(required = false) String searchPayload, @RequestParam(value = "p", required = false) Integer pageNumber) { } 上面的代码就可以从 URL 获得请求参数 p。 URL 也可以使用非常简单的参数模式。 /visa/search?p=0 通过上面的代码,在你的控制层中,就可以获得 p 传递给程序的数据了。 因为我们将 p 定义成整形,Spring 也非常贴心的给我们做了类型校验。 如果你传入的数据是字符的话,这里会抛出一个异常。 这个错误就是类型转换错误。 https://www.ossez.com/t/spring-postmapping-url/14095
对 2 个 Moment 的时间进行比较,并且获得不同天数的代码如下: moment().diff(moment(date), 'days'); 这行代码已经简单到不能再简单了。 解读 简单来说,这个代码的意思就是先获得当前时间,然后与需要比较的时间进行比较。 对于比较的结果使用不同 Unit 来进行表示。 因为我们的目标是使用天,所以就直接使用 days 就可以了。 上面的图片显示了可以使用的参数。 针对我们项目的需求,我们写了一个上面的函数。 上面的函数先会对输入的日期进行判断,然后再进行计算。 https://www.ossez.com/t/moment-js/14098
不好说,去 Oracle 化是很多公司逐步推进的政策。 JVM 有 OpenJ9。很多公司可能会用 IBM 的版本。 JDK 这东西,能用就不会升级。 JDK 太基础了,决定了后面的很多 jar 的版本。 https://www.ossez.com/t/jdk-17-jdk-8/14102
VUE 的数据引用有多种方式。 直接输出数据 如果我们希望页面中直接输出数据就可以使用: {{ pageNumber }} 双括号引用的方式即可。 在 JavaScript 中引用 如果你需要直接在代码中使用,直接使用变量名就可以了。 上面这张小图,显示了引用的方式。 https://www.ossez.com/t/vue-v-for/14094
在项目中,需要使用 VUE 的 v-for 循环对列表进行输出。 直接在标签中使用。 <li v-for="data in totalPages" :key="data"> <a class="page-link" href="javascript: void(0);" @click="pageSearch(data )">{{data}}</a> </li> 上面的代码是直接在标签中输出。 根据 totalPages 中的数据大小循环 1 次输出 li 标签。 使用 template 因有时候我们可能还需要对标签进行操作和控制。 如果直接在标签中输出的话,不好对标签进行控制。 因此我们还可以使用 template。 代码如下: <template v-for="pageNumber in totalPages" :key="pageNumber"> <li class="page-item active"> <a class="page-link" href="javascript: void(0);" @click="pageSearch(pageNumber)">{{ pageNumber }}</a> </li> </template> 直接进行使用就可以了。 根据项目中需求,直接进行按照需要进行编码就可以了。 https://www.ossez.com/t/vue-v-for-2/14093