springboot项目构建过程中易踩坑点
文章目录
- 写在前面
- 1、mysql驱动相关问题
- 1.1、时区问题
- 1.2、驱动版本问题
- 2、spring默认日志
- 2.1、日志配置logging.file
- 3、JPA相关问题
- 3.1、@Table(name=“XXX”)报错
- 3.2 、字段命名时提示错误
- 3.3 、报错'@Query' not applicable to field
- 3.4、 报错JPA-style positional param was not...
- 4、idea相关问题
- 4.1、idea创建spring项目时遇到的问题
- 4.2、解决新建maven项目仓库变化的问题
- 4.3、idea创建spring项目特别慢
- 5、打包与发布
- 5.1、打jar包运行时,java版本错误
- 5.2、使用node.js静态资源发布
- 5.3、windows下使用nginx
- 6、jar包、tomcat 、外部资源相关
- 6.1、springboot映射外部资源
- 7、Spring注解
- 7.1、@Value
写在前面
2020年9月27日
因为涉及spring版本问题,这里的踩坑记录适合于:
spring boot 2.3.4.RELEASE
thymeleaf 3.0.2.RELEASE
其他版本自行分辨
1、mysql驱动相关问题
1.1、时区问题
运行spring项目报类似这样的错误:The server time zone value ‘???’ is unrecognized or represents more than one time zone.
解决方案:在你的配置文件jdbc连接末尾加上:&serverTimezone=Hongkong
你可能看见很多教程叫你加:&serverTimezone=UTC
UTC也可以,但那是美国时区,和国内相差8、9个小时,
除了可以写成Hongkong以为,还可以写成Shanghai。
1.2、驱动版本问题
运行spring项目报类似这样的错误:Loading class `com.mysql.jdbc.Driver’. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver’.
上面这串英文翻译过来就是解决方案:把com.mysql.jdbc.Driver替换成com.mysql.cj.jdbc.Driver
com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的。
所用它两具体用谁,看你的依赖用的哪个版本
2、spring默认日志
2.1、日志配置logging.file
在新的版本中 logging.file 和 logging.path 过时,要使用以下两个:
logging.file.name 可以指定路径和log文件的名字
logging.file.path 只可以只当log的路径, 不能指定log的名字, 使用默认命名spring.log
两个不能同时使用,同时配置了,只有logging.file.name生效
3、JPA相关问题
3.1、@Table(name=“XXX”)报错
报错原因Hibernate4.3以后不支持@Table(name=“tablename”),
请使用@Entity(name=“tablename”)代替@Table(name=“tablename”)。
JPA是Hibernate遵循的规范之一
3.2 、字段命名时提示错误
如下图
这个是idea检测出来的,实际并不影响运行,错误的原因是因为注解的字段没有与idea的数据连接进行关联。
解决步骤:
1、找到Persistence》右击sessionFaccory》点击Assign Data Sources
2、选择对应的数据库
然后这个报错就没有了
3.3 、报错’@Query’ not applicable to field
翻译:’@Query’不能应用在字段上。
这种报错就是你把()漏掉了,就成了写在字段上了。
3.4、 报错JPA-style positional param was not…
在sql代码里,?后面有数字,数字不能直接接;分号,要加个空格
4、idea相关问题
4.1、idea创建spring项目时遇到的问题
遇到Error parsing JSON response这样的错误
解决办法1:修改HTTP Proxy
注意最后这里输入的是:https://start.spring.io
必须有是https
解决办法2:创建时该地址为https://start.aliyun.com
4.2、解决新建maven项目仓库变化的问题
到other settings里面修改,改完点保存
4.3、idea创建spring项目特别慢
可以直接用浏览器访问https://start.aliyun.com
建好项目,下载,然后再用idea打开就可以了
5、打包与发布
5.1、打jar包运行时,java版本错误
类似这样的错误
Exception in thread "main" java.lang.UnsupportedClassVersionError:
demoApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
原因可能是系统的java版本低了,下载一个版本高点的java
(这里我换成了java 11解决了这个问题 )
5.2、使用node.js静态资源发布
使用node.js发布静态资源
1、下载node.js
https://nodejs.org/zh-cn/
然后直接安装就可以了
2、检查是否有npm
安装完成,在cmd输入npm -v
成功显示版本表示有
3、发布静态资源
在cmd输入npx http-server c:/html/
5.3、windows下使用nginx
需要注意,nginx的config文件,用记事本编辑后一旦有中文并保存后,记事本会将配置文件转为带BOM头的文件。容易报错,Linux下使用vim编辑、windows下建议使用一些代码编辑软件去写。
6、jar包、tomcat 、外部资源相关
使用外置tomcat发布spring参考:
https://segmentfault.com/a/1190000015173569?utm_source=sf-related
springboot工程打成jar包后运行时,读取外部的配置文件
https://blog.csdn.net/whuzjn/article/details/106921960
6.1、springboot映射外部资源
springboot项目打成jar包后,是无法访问jar包以外的资源。
如果外部资源不多,我们想通过浏览器直接能访问jar包以外的资源,
就需要将外部路径映射成静态资源路径。
本文参考文章: https://blog.csdn.net/duangecho/article/details/80258300
第一步,在application.yaml里面配置server.tomcat.basedir
server.tomcat.basedir:配置 Tomcat 运行日志和临时文件的目录。若不配置,则默认使用系统的临时目录。
更多内置tomcat说明参考:https://www.hangge.com/blog/cache/detail_2457.html
第二步:添加一个配置类MyConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.io.File;
import java.io.FileNotFoundException;@Configuration
public class MyConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {File path = null;try {path = new File(ResourceUtils.getURL("classpath:").getPath());} catch (FileNotFoundException e) {e.printStackTrace();}String gitPath=path.getParentFile().getParentFile().getParent()+File.separator+"logistics"+File.separator+"uploads"+File.separator;registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath);registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");}
}
如上配置类主要配置了 能够访问的静态资源路径
第三步:把项目打包运行
在jar包所在路径输入java -jar XXX.jar运行
第四步:静态资源
在jar包所在路径,我们可以看到生成了一个logistics文件夹
我们在logistics里新建一个uploads文件夹,
再往uploads里面新建一个html文件夹,并放入1.html
这样就可以成功访问静态资源1.html了
7、Spring注解
7.1、@Value
@Service
public class yy {@Value("${spring.application.name}")private String mmm;public void mu() {System.out.println(mmm);}
}
使用@Value有几个条件
- 1、必须采用 依赖注入的方式进行实例化(也就是不能new,必须有@Service、@Component这样的注解在类头上)。
- 2、不支持把值注入到静态变量中(也就是不能有static关键字)
- 3、不能使用显式的构造方法(也就是init() 方法)
如果想让静态方法获取值,可以利用一个set方法获取
@Service
public class yy {private static String mmm;@Value("${spring.application.name}")private void setMmm(String mmm){this.mmm = mmm;}public void mu() {System.out.println(mmm);}
}
如果想让显式的构造方法获取值,可以利用@PostConstruct
@Service
public class yy {@Value("${spring.application.name}")private String mmm;@PostConstruct //加上该注解表明该方法会在bean初始化后调用private void init() {System.out.println(mmm);}}
springboot项目构建过程中易踩坑点相关推荐
- FAQ:Springboot项目运行过程中java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
原因是jar包在运行过程中因为要调试被我mvn package重新编译了,程序依赖的包变化导致运行时错误. 2019-07-18 17:01:59.913 DEBUG 21687 --- [0.0-7 ...
- 安装KeOps过程中的踩坑记录
由于需要跑一篇论文的代码,需要安装KeOps.这里忍不住再吐槽一次:Python开发环境的版本依赖管理太混乱了,加上各种操作系统,驱动,CUDA版本等等,太浪费生命.所以,如果要写论文,发布open ...
- SpringBoot 项目构建 Docker 镜像调优实践
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...
- 记SpringBoot项目运行2h自动挂掉的坑
记SpringBoot项目运行2h自动挂掉的坑 背景 过程 解决方案一 解决方案二 总结 背景 以前多使用tomcat容器部署war项目或者使用jenkins直接部署,没有亲自体验过部署jar.所以, ...
- HTML常见标签易踩坑笔记(一)
最近在学习HTML的时候,遇到一些容易踩坑的点,梳理一遍,顺便把常用的标签再巩固巩固. 1.article 标签(H5新标签) (1)定义:<article>元素表示文档.页面.应用或网站 ...
- TrinityCore3.3.5编译过程-官方指导-踩坑总结
TrinityCore3.3.5编译过程-官方指导-踩坑总结 官方指导:主页->how to compile -> windows 指导文档写得很详细,但有不少细节点没提到,这里把过程简化 ...
- 让你在 API 设计中少踩坑的实战分享
本文来自作者 奔跑吧架构师 在 GitChat 上分享 「让你在 API 设计中少踩坑的实战分享」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 在项目开发中,实际的编码只占用了整个项目不 ...
- 记一次成功把Vue2后台项目改造成Vite2的踩坑经历
文章目录 前言 一.项目背景 1.1.为什么要选择Vite 二.迁移前的准备 2.1.补全.vue后缀 2.2.移动public/index.html的位置 2.2.1.通过vite-plugin-h ...
- Maven学习总结(2)——Maven项目构建过程练习
Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建 ...
- Maven学习总结(二)——Maven项目构建过程练习
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验 ...
最新文章
- JRE和JDK的区别分别代表什么
- Spring-Cloud中常见的服务组件
- spring security 认证与权限控制
- python 版本2和3 在/取模方面的的差异
- JAVA进阶教学之(数字格式化和高精度数字)
- C#多线程学习(一) 多线程的相关概念
- soa面向服务体系结构_服务和面向微服务的体系结构简介
- idea 本地远程debug服务器项目
- hello March
- 伪标记是一种简单的半监督学习方法
- java爬取豆瓣电影TOP250排行
- 3.4 方便快捷的魔棒工具 [Ps教程]
- Mybatis之select元素
- scrapy爬虫-美图录
- 易语言excel内容查找助手
- 计算机系统是几位怎么看,Win10系统如何查看系统位数是32位还是64位
- php+后台+限制+登录次数,THINKSNS取消后台登录密码错误次数限制的办法详解
- 【20210906】让实验室服务器运行本地python代码
- VisionMobile:移动平台生态系统冲突报告(十)Chapter C:黑莓
- Android渠道包测试方案
热门文章
- 关于SEO优化的建议
- 用计算机弹苹果手机铃声,10秒搞定,苹果iPhone手机不用电脑换铃声,这个方法真的炒鸡简单!...
- [Hi3751V350][Android9.0] 调试笔记 --- 添加并设置默认系统字库
- TCP客户端和服务端的互通信息
- 二分法和黄金分割法的区别和联系,附Python代码
- 移动端获取手机自带的返回键并添加事件。
- html竖版古诗,古诗竖版手抄报版面设计图
- PMP项目管理适用于哪些行业?
- 面矢量栅格化(python)
- 六万字带你一次性速通python爬虫基础