Thymeleaf调用Spring的Bean的函数

问题见:https://stackoverflow.com/questions/53803497

为什么按照官网上的写法调用@Bean报错:EL1057E: No bean resolver registered in the context to resolve access to bean

有时候我们希望自己去通过thymeleaf进行解析文本,调用自定义的函数。比如

如果我们在模板里使用了 ${@beanName.method()},此时会报错:

但是如果我们是通过模板进行MVC页面渲染就不会报错,其实原因就是因为此时的context里缺少了spring的Beans的信息,通过spring mvc渲染时,框架会加入这些信息。那么手动渲染时我们也添加Beans的信息就可以了。

此时在进行渲染就正常了。

如果想更接近 Spring MVC 解析逻辑的,参考如代码:

参考链接


Spring Boot启动报错-"类文件具有错误的版本 61.0, 应为 52.0"

项目使用的 Spring Boot 升级到 3.0.5 版本

编译的时候报错如下:

或者:

原因

SpringBoot 使用了 3.0 或者 3.0 以上,因为 Spring 官方发布从 Spring 6 以及 SprinBoot 3.0 开始最低支持 JDK17,所以仅需将 SpringBoot 版本降低为 3.0 以下即可。

参考链接


mybaties连接sqlite,并读取blob类型数据时,报错 java.sql.SQLFeatureNotSupportedException

错误,或者如下错误:

场景:
具体需求,要求像springboot连接mysql或者pgsql数据库一样,在application配置文件中配置sqlite数据库信息,并实现对blob类型数据(我们的库中有该类型的数据)的读写,按照平常一样写好controller、service、dao、mapper.xml后,执行查询操作后报错

原因分析:
sqlite的driver中,JDBC4ResultSet没有实现以下接口:

而是直接抛出了异常。
解决方法:
mapper.xml中该字段的设置:

即blob字段加个typeHandler属性。
然后自定义一个BlobTypeHandler处理类:

注意:实体类中blob字段类型是byte[]。

参考链接


mybaties连接sqlite,并读取blob类型数据时,报 java.sql.SQLException: not implemented by SQLite JDBC driver错误

spring boot设置favicon,favicon不生效,不成功,不起作用

Favicon配置

默认的Favicon图标

关闭默认图标
在application.properties中添加:

或者(我这个有效果):

效果 具体原因:https://jira.spring.io/browse/SPR-12851

spring boot设置favicon,favicon不生效,不成功,不起作用

springboot显示的是一片叶子,我们如何使用自己的favicon呢?

1.将favicon.icon放到resources目录下  例如:/public,/static等等

2.完成上面的步骤还不能显示,还需在你的页面的head标签添加代码

3.注意我使用的thymeleaf所以是以上代码片段如果你不是请这样添加

参考链接


spring boot设置favicon,favicon不生效,不成功,不起作用

HttpClient利用MultipartEntityBuilder取代MultipartEntity上传图片文件到服务器

注意:在HttpClient4.3之后,原来的上传文件方法MultipartEntity已经不建议使用,现替换成新的httpmime下面的MultipartEntityBuilder。

需要添加httpclient-4.5.jar、httpmime-4.5.jar两个包

maven添加:


下面我们对比一下MultipartEntity和MultipartEntityBuilder的使用区别:

MultipartEntityBuilder:

MultipartEntity:

直接上替换后的测试代码:


继续阅读HttpClient利用MultipartEntityBuilder取代MultipartEntity上传图片文件到服务器

Spring Boot实现异步任务

Spring Boot中的另外一个任务:异步任务。所谓异步任务,其实就是异步执行程序,有些时候遇到一些耗时的的任务,如果一直卡等待,肯定会影响其他程序的执行,所以就让这些程序需要以异步的方式去执行。那么下面就来介绍Spring Boot 如何实现异步任务。

一、使用注解@EnableAsync 开启异步调用方法

在application启动类中,加上@EnableAsync注解,Spring Boot 会自动扫描异步任务。

二、创建异步执行类,定义@Component及@Async组件

创建com.weiz.tasks包,在tasks包里增加AsyncTask 异步任务类,加上@Component 注解,然后在需要异步执行的方法前面加上@Async注解,这样Spring Boot容器扫描到相关异步方法之后,调用时就会将这些方法异步执行。

说明:@Async 加上这个注解,就表示该方法是异步执行方法。

三、调用

创建一个DoTask调用类,我们看看这几个方法,是怎么执行的:

继续阅读Spring Boot实现异步任务

SpringBoot如何实现一个实时更新的进度条的示例代码

前言

导入excel表格批量修改状态,期间如果发生错误则所有数据不成功,为了防止重复提交,做一个类似进度条的东东。

那么下面我会结合实际业务对这个功能进行分析和记录。

正文

思路

前端使用bootstrap,后端使用SpringBoot分布式到注册中心,原先的想法是导入表格后异步调用修改数据状态的方法,然后每次计算修改的进度然后存放在session中,前台jquery写定时任务访问获取session中的进度,更新进度条进度和百分比。但是这存在session在服务间不共享,跨域问题。那么换一个方式存放,存放在redis中,前台定时任务直接操作获取redis的数据。

实施
进度条

先来看一下bootstrap的进度条

 进度条更新主要更新style="width: 40%;"的值即可,div里面的40%可以省略,无非时看着明确。

可以考虑将进度条放入弹出层。

定时任务

解释:点击确认导入文件后成功后开启定时任务每一秒(一千毫秒)访问一次后台获取redis存放的进度,返回更新进度条,如果更新完成或者更新失败(根据后台返回的数据决定)则停止定时任务显示相应的信息并刷新页面。获取最新数据。

后台控制层

导入时调用第一个bulk***es方法,定时任务调用t***sk方法,导入完成或发生错误调用de***ess方法删除redis数据,避免占用资源。

服务层

每更新一条数据存放进度,当发生错误则进行回滚。如果开启异步则需要在启动类添加注解@EnableAsync。

继续阅读SpringBoot如何实现一个实时更新的进度条的示例代码

用SpringBoot框架来接收multipart/form-data文件

在本文中,您将学习如何使用 Spring Boot 实现 Web 服务中的文件上传和下载功能。首先会构建一个 REST APIs 实现上传及下载的功能,然后使用 Postman 工具来测试这些接口,最后创建一个 Web 界面使用 JavaScript 调用接口演示完整的功能。最终界面及功能如下:

继续阅读用SpringBoot框架来接收multipart/form-data文件

macOS Catalina(10.15.4)/IntelliJ IDEA 2018.3/Tomcat 9.0.33/Maven项目调试报错"Caused by: java.util.zip.ZipException: zip file is empty"

macOS Catalina(10.15.4)/IntelliJ IDEA 2018.3/Tomcat 9.0.33/Maven项目调试时报错,这个项目以前是可以正常调试的,一段时间之后,就不能正常调试之下了

继续阅读macOS Catalina(10.15.4)/IntelliJ IDEA 2018.3/Tomcat 9.0.33/Maven项目调试报错"Caused by: java.util.zip.ZipException: zip file is empty"