新手必看

新手必看

常见问题必读帮助文件
鸿宇官网

鸿宇官网

鸿宇科技官方网站
鸿宇教程库

鸿宇教程库

鸿宇科技官方教程
功能反馈与建议

功能反馈与建议

BUG反馈问题建议
鸿宇淘宝店铺

鸿宇淘宝店铺

鸿宇官方唯一淘宝店铺
旺迈特官网

旺迈特官网

B2B2C新零售智慧生态电商系统
旺迈特演示站点

旺迈特演示站点

B2B2C多用户商城、新零售智慧生态电商系统
QQ客服(技术支持)

QQ客服(技术支持)

QQ:1527200768/获取论坛账号/软件开发/功能定制

SpringBoot上传文件临时目录问题 The temporary upload location [/tmp/tomcat.5201256630819945445.6010/work/Tomcat/localhost/admin] is not valid

鸿宇 发表了文章 • 0 个评论 • 672 次浏览 • 2021-11-20 16:34 • 来自相关话题

官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
技术QQ号:1527200768
 1.错误提示:The temporary upload location [/tmp/tomcat.5201256630819945445.6010/work/Tomcat/localhost/admin] is not valid
 
2.进入生产间的linxu服务器,结果发现,没有这个目录,为什么会用到这个目录呢?
原来springBoot上传的文件,会先缓存到本地磁盘;
为什么要缓存文件?
因为流取一次消费之后,后面无法再从流中获取数据,所以缓存方便后续复用;
而缓存的路径就是上面的路径:/tmp/tomcat.5201256630819945445.6010
内置的tomcat需要创建临时目录来存放上传的文件, 当POST请求的content-type是multipart/form-data的时候就会访问这个目录, 而这个目录在Linux系统中默认建在/tmp目录下, 10天期间,如果没有上传文件的需求,那这个路径就会被linux清除, 引发异常。
 
3.解决办法
 
方法一:既然目录被删除了,重启一下服务,让系统重新生成该目录,临时解决(但是以后目录还可能被删除)

方法二:既然是Linux删除的临时路径,可以配置一下不删除tmp目录下的tomcat

vim /usr/lib/tmpfiles.d/tmp.conf

# 添加下面一行

x /tmp/tomcat.*

方法三:启动springBoot程序,添加使用指定临时目录的启动参数 -java.tmp.dir=/usr/tomcat/tmpfile

方法四:在配置文件中,自定义一个目录,不用临时目录缓存上传的文件:
server.tomcat.basedir=/usr/tomcat/tmpfile

spring.http.multipart.location=/usr/tomcat/tmpfile 查看全部
官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com
鸿宇QQ群:90664526
技术QQ号:1527200768
 1.错误提示:The temporary upload location [/tmp/tomcat.5201256630819945445.6010/work/Tomcat/localhost/admin] is not valid
 
2.进入生产间的linxu服务器,结果发现,没有这个目录,为什么会用到这个目录呢?
原来springBoot上传的文件,会先缓存到本地磁盘;
为什么要缓存文件?
因为流取一次消费之后,后面无法再从流中获取数据,所以缓存方便后续复用;
而缓存的路径就是上面的路径:/tmp/tomcat.5201256630819945445.6010
内置的tomcat需要创建临时目录来存放上传的文件, 当POST请求的content-type是multipart/form-data的时候就会访问这个目录, 而这个目录在Linux系统中默认建在/tmp目录下, 10天期间,如果没有上传文件的需求,那这个路径就会被linux清除, 引发异常。
 
3.解决办法
 
方法一:既然目录被删除了,重启一下服务,让系统重新生成该目录,临时解决(但是以后目录还可能被删除)

方法二:既然是Linux删除的临时路径,可以配置一下不删除tmp目录下的tomcat

vim /usr/lib/tmpfiles.d/tmp.conf

# 添加下面一行

x /tmp/tomcat.*

方法三:启动springBoot程序,添加使用指定临时目录的启动参数 -java.tmp.dir=/usr/tomcat/tmpfile

方法四:在配置文件中,自定义一个目录,不用临时目录缓存上传的文件:
server.tomcat.basedir=/usr/tomcat/tmpfile

spring.http.multipart.location=/usr/tomcat/tmpfile

IntelliJ IDEA 中 SpringBoot 配置文件获得的属性中文乱码

鸿宇 发表了文章 • 0 个评论 • 1397 次浏览 • 2020-04-24 23:34 • 来自相关话题

一、设置IntelliJ IDEA




 
二、application.properties 添加配置server.tomcat.uri-encoding=UTF-8
spring.banner.charset=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8 查看全部
一、设置IntelliJ IDEA
Snipaste_2020-04-24_23-32-13.png

 
二、application.properties 添加配置
server.tomcat.uri-encoding=UTF-8
spring.banner.charset=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

IntelliJ IDEA 实用功能 Auto Import:自动优化导包(自动删除、导入包)

鸿宇 发表了文章 • 0 个评论 • 1350 次浏览 • 2020-04-24 21:02 • 来自相关话题

 
Auto Import的功能是可以帮助我们自动删除无用的包Import(未被引用),以及自动Import填充尚未导入的包。完全智能化地帮助我们在开发程序时,省略了导包的操作,大大优化了开发的效率。并且,当你移动某个类改变其路径的时候,这个功能会相应的改变关联的文件中包的路径。
 
Auto Import设置步骤详解
 
1. Settings→Editor→General→Auto Import 
2. 然后勾选Add unambiguous imports on the fly以及Optimize imports on the fly 
 
Add unambiguous imports on the fly:快速添加明确的导入。

Optimize imports on the fly:快速优化导入,优化的意思即自动帮助删除无用的导入。





  查看全部
 

Auto Import的功能是可以帮助我们自动删除无用的包Import(未被引用),以及自动Import填充尚未导入的包。完全智能化地帮助我们在开发程序时,省略了导包的操作,大大优化了开发的效率。并且,当你移动某个类改变其路径的时候,这个功能会相应的改变关联的文件中包的路径。


 
Auto Import设置步骤详解
 
1. Settings→Editor→General→Auto Import 
2. 然后勾选Add unambiguous imports on the fly以及Optimize imports on the fly 
 

Add unambiguous imports on the fly:快速添加明确的导入。

Optimize imports on the fly:快速优化导入,优化的意思即自动帮助删除无用的导入。



Snipaste_2020-04-24_21-00-51.png

 

IntelliJ IDEA 中实现 Spring Boot 热部署

鸿宇 发表了文章 • 0 个评论 • 1099 次浏览 • 2020-04-24 20:14 • 来自相关话题

一、开启IDEA的自动编译(静态)

具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。




 
二、开启IDEA的自动编译(动态)

具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

compiler.automake.allow.when.app.running -> 自动编译
compile.document.save.trigger.delay -> 自动更新文件

PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!








 
三、开启IDEA的热部署策略(非常重要) 

具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。








 
四、在项目添加热部署插件(可选) 
 
温馨提示:如果因为旧项目十分臃肿,导致每次都自动热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行手工免启动快速更新!!
 
具体步骤:在POM文件添加热部署插件<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
 五、关闭浏览器缓存(重要) 

打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。




热部署到底有多爽呢,用渣渣辉的话来说,只需体验三分钟,你就会干我一样,爱上这款呦西。 查看全部
一、开启IDEA的自动编译(静态)

具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。
Snipaste_2020-04-24_20-09-30.png

 
二、开启IDEA的自动编译(动态)

具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

compiler.automake.allow.when.app.running -> 自动编译
compile.document.save.trigger.delay -> 自动更新文件

PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!
Snipaste_2020-04-24_20-10-09.png

Snipaste_2020-04-24_20-17-58.png

 
三、开启IDEA的热部署策略(非常重要) 

具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。
Snipaste_2020-04-24_20-21-37.png

Snipaste_2020-04-24_20-21-10.png

 
四、在项目添加热部署插件(可选) 
 

温馨提示:如果因为旧项目十分臃肿,导致每次都自动热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行手工免启动快速更新!!


 
具体步骤:在POM文件添加热部署插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>

 五、关闭浏览器缓存(重要) 

打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。
8069210-67a17f7997f9b551.webp_.jpg

热部署到底有多爽呢,用渣渣辉的话来说,只需体验三分钟,你就会干我一样,爱上这款呦西。

Spring Boot配置文件放在jar外部

鸿宇 发表了文章 • 0 个评论 • 1719 次浏览 • 2018-04-11 14:32 • 来自相关话题

 官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526

参见Externalized Configuration
 
Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢?

查询官网,可以得到下面的几种方案:

通过命令行指定

SpringApplication会默认将命令行选项参数转换为配置信息
例如,启动时命令参数指定:java -jar myproject.jar --server.port = 9000从命令行指定配置项的优先级最高,不过你可以通过setAddCommandLineProperties来禁用SpringApplication.setAddCommandLineProperties(false).外置配置文件

Spring程序会按优先级从下面这些路径来加载application.properties配置文件

当前目录下的/config目录
当前目录
classpath里的/config目录
classpath 跟目录

因此,要外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录

自定义配置文件

如果你不想使用application.properties作为配置文件,怎么办?完全没问题java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties或者java -jar -Dspring.config.location=D:\config\config.properties springbootrestdemo-0.0.1-SNAPSHOT.jar 当然,还能在代码里指定@SpringBootApplication
@PropertySource(value={"file:config.properties"})
public class SpringbootrestdemoApplication {

public static void main(String args) {
SpringApplication.run(SpringbootrestdemoApplication.class, args);
}
}按Profile不同环境读取不同配置

不同环境的配置设置一个配置文件,例如:

dev环境下的配置配置在application-dev.properties中;
prod环境下的配置配置在application-prod.properties中。

在application.properties中指定使用哪一个文件spring.profiles.active = dev当然,你也可以在运行的时候手动指定:java -jar myproject.jar --spring.profiles.active = prod
  查看全部
 官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526

参见Externalized Configuration
 
Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢?

查询官网,可以得到下面的几种方案:

通过命令行指定

SpringApplication会默认将命令行选项参数转换为配置信息
例如,启动时命令参数指定:
java -jar myproject.jar --server.port = 9000
从命令行指定配置项的优先级最高,不过你可以通过setAddCommandLineProperties来禁用
SpringApplication.setAddCommandLineProperties(false).
外置配置文件

Spring程序会按优先级从下面这些路径来加载application.properties配置文件

当前目录下的/config目录
当前目录
classpath里的/config目录
classpath 跟目录

因此,要外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录

自定义配置文件

如果你不想使用application.properties作为配置文件,怎么办?完全没问题
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
或者
java -jar -Dspring.config.location=D:\config\config.properties springbootrestdemo-0.0.1-SNAPSHOT.jar 
当然,还能在代码里指定
@SpringBootApplication
@PropertySource(value={"file:config.properties"})
public class SpringbootrestdemoApplication {

public static void main(String args) {
SpringApplication.run(SpringbootrestdemoApplication.class, args);
}
}
按Profile不同环境读取不同配置

不同环境的配置设置一个配置文件,例如:

dev环境下的配置配置在application-dev.properties中;
prod环境下的配置配置在application-prod.properties中。

在application.properties中指定使用哪一个文件
spring.profiles.active = dev
当然,你也可以在运行的时候手动指定:
java -jar myproject.jar --spring.profiles.active = prod

 

Spring Boot 获取配置文件中的中文乱码原因和解决方案

鸿宇 发表了文章 • 0 个评论 • 1840 次浏览 • 2018-04-11 14:11 • 来自相关话题

官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526
 
一、出错原因:
application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。
 
二、解决方案:
如果IDEA直接设置 File Encodings的Transparent native-to-ascii conversion为true即可!
  查看全部
官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526
 
一、出错原因:
application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。
 
二、解决方案:
如果IDEA直接设置 File Encodings的Transparent native-to-ascii conversion为true即可!
 

Spring Boot项目在IntelliJ IDEA中实现热部署

鸿宇 发表了文章 • 0 个评论 • 1836 次浏览 • 2018-04-09 19:47 • 来自相关话题

官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526
 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。
原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快。
其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)

一、开启idea自动make功能 

1、CTRL + SHIFT + A --> 查找 make project automatically --> 选中




2、CTRL + SHIFT + A --> 查找 Registry --> 找到并勾选compiler.automake.allow.when.app.running




3、最后重启idea
 
二、使用spring-boot-1.3开始有的热部署功能 

1、加maven依赖<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
三、Chrome禁用缓存
 
F12(或Ctrl+Shift+J或Ctrl+Shift+I)--> NetWork --> Disable Cache(while DevTools is open)





至此,在IntelliJ IDEA中就可以愉快的修改代码了,修改后可以及时看到效果,无须手动重启和清除浏览器缓存。
 
测试方法:
1.修改类-->保存:应用会重启
2.修改配置文件-->保存:应用会重启
3.修改页面-->保存:应用会重启,页面会刷新(原理是将spring.thymeleaf.cache设为false)

不能使用分析:
1.对应的spring-boot版本是否正确,我这里使用的是2.0.1.RELEASE版本;
2.Intellij IDEA是否开启了Make Project Automatically。
3.如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。 查看全部
官方出品:鸿宇科技
鸿宇论坛:bbs.hongyuvip.com

鸿宇QQ群:90664526
 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。
原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快。
其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)

一、开启idea自动make功能 

1、CTRL + SHIFT + A --> 查找 make project automatically --> 选中
824490-20170404213116003-699199821.png

2、CTRL + SHIFT + A --> 查找 Registry --> 找到并勾选compiler.automake.allow.when.app.running
824490-20170404213933222-1782823544.png

3、最后重启idea
 
二、使用spring-boot-1.3开始有的热部署功能 

1、加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>

三、Chrome禁用缓存
 
F12(或Ctrl+Shift+J或Ctrl+Shift+I)--> NetWork --> Disable Cache(while DevTools is open)
824490-20170404213518191-1967052809.png


至此,在IntelliJ IDEA中就可以愉快的修改代码了,修改后可以及时看到效果,无须手动重启和清除浏览器缓存。
 
测试方法:
1.修改类-->保存:应用会重启
2.修改配置文件-->保存:应用会重启
3.修改页面-->保存:应用会重启,页面会刷新(原理是将spring.thymeleaf.cache设为false)

不能使用分析:
1.对应的spring-boot版本是否正确,我这里使用的是2.0.1.RELEASE版本;
2.Intellij IDEA是否开启了Make Project Automatically。
3.如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。