SpringBoot上传文件临时目录问题 The temporary upload location [/tmp/tomcat.5201256630819945445.6010/work/Tomcat/localhost/admin] is not valid
鸿宇 发表了文章 • 0 个评论 • 972 次浏览 • 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 个评论 • 1615 次浏览 • 2020-04-24 23:34
二、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 个评论 • 1626 次浏览 • 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:快速优化导入,优化的意思即自动帮助删除无用的导入。
IntelliJ IDEA 中实现 Spring Boot 热部署
鸿宇 发表了文章 • 0 个评论 • 1386 次浏览 • 2020-04-24 20:14
具体步骤:打开顶部工具栏 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 。
热部署到底有多爽呢,用渣渣辉的话来说,只需体验三分钟,你就会干我一样,爱上这款呦西。 查看全部
具体步骤:打开顶部工具栏 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 。
热部署到底有多爽呢,用渣渣辉的话来说,只需体验三分钟,你就会干我一样,爱上这款呦西。
Spring Boot配置文件放在jar外部
鸿宇 发表了文章 • 0 个评论 • 1889 次浏览 • 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按Profile不同环境读取不同配置
@PropertySource(value={"file:config.properties"})
public class SpringbootrestdemoApplication {
public static void main(String args) {
SpringApplication.run(SpringbootrestdemoApplication.class, args);
}
}
不同环境的配置设置一个配置文件,例如:
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 个评论 • 2013 次浏览 • 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 个评论 • 2021 次浏览 • 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 --> 选中
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),则自动重启将不起作用。