文章目录

  • 写在前面
    • 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项目构建过程中易踩坑点相关推荐

  1. 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 ...

  2. 安装KeOps过程中的踩坑记录

    由于需要跑一篇论文的代码,需要安装KeOps.这里忍不住再吐槽一次:Python开发环境的版本依赖管理太混乱了,加上各种操作系统,驱动,CUDA版本等等,太浪费生命.所以,如果要写论文,发布open ...

  3. SpringBoot 项目构建 Docker 镜像调优实践

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...

  4. 记SpringBoot项目运行2h自动挂掉的坑

    记SpringBoot项目运行2h自动挂掉的坑 背景 过程 解决方案一 解决方案二 总结 背景 以前多使用tomcat容器部署war项目或者使用jenkins直接部署,没有亲自体验过部署jar.所以, ...

  5. HTML常见标签易踩坑笔记(一)

    最近在学习HTML的时候,遇到一些容易踩坑的点,梳理一遍,顺便把常用的标签再巩固巩固. 1.article 标签(H5新标签) (1)定义:<article>元素表示文档.页面.应用或网站 ...

  6. TrinityCore3.3.5编译过程-官方指导-踩坑总结

    TrinityCore3.3.5编译过程-官方指导-踩坑总结 官方指导:主页->how to compile -> windows 指导文档写得很详细,但有不少细节点没提到,这里把过程简化 ...

  7. 让你在 API 设计中少踩坑的实战分享

    本文来自作者 奔跑吧架构师 在 GitChat 上分享 「让你在 API 设计中少踩坑的实战分享」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 在项目开发中,实际的编码只占用了整个项目不 ...

  8. 记一次成功把Vue2后台项目改造成Vite2的踩坑经历

    文章目录 前言 一.项目背景 1.1.为什么要选择Vite 二.迁移前的准备 2.1.补全.vue后缀 2.2.移动public/index.html的位置 2.2.1.通过vite-plugin-h ...

  9. Maven学习总结(2)——Maven项目构建过程练习

    Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建 ...

  10. Maven学习总结(二)——Maven项目构建过程练习

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验 ...

最新文章

  1. JRE和JDK的区别分别代表什么
  2. Spring-Cloud中常见的服务组件
  3. spring security 认证与权限控制
  4. python 版本2和3 在/取模方面的的差异
  5. JAVA进阶教学之(数字格式化和高精度数字)
  6. C#多线程学习(一) 多线程的相关概念
  7. soa面向服务体系结构_服务和面向微服务的体系结构简介
  8. idea 本地远程debug服务器项目
  9. hello March
  10. 伪标记是一种简单的半监督学习方法
  11. java爬取豆瓣电影TOP250排行
  12. 3.4 方便快捷的魔棒工具 [Ps教程]
  13. Mybatis之select元素
  14. scrapy爬虫-美图录
  15. 易语言excel内容查找助手
  16. 计算机系统是几位怎么看,Win10系统如何查看系统位数是32位还是64位
  17. php+后台+限制+登录次数,THINKSNS取消后台登录密码错误次数限制的办法详解
  18. 【20210906】让实验室服务器运行本地python代码
  19. VisionMobile:移动平台生态系统冲突报告(十)Chapter C:黑莓
  20. Android渠道包测试方案

热门文章

  1. 关于SEO优化的建议
  2. 用计算机弹苹果手机铃声,10秒搞定,苹果iPhone手机不用电脑换铃声,这个方法真的炒鸡简单!...
  3. [Hi3751V350][Android9.0] 调试笔记 --- 添加并设置默认系统字库
  4. TCP客户端和服务端的互通信息
  5. 二分法和黄金分割法的区别和联系,附Python代码
  6. 移动端获取手机自带的返回键并添加事件。
  7. html竖版古诗,古诗竖版手抄报版面设计图
  8. PMP项目管理适用于哪些行业?
  9. 面矢量栅格化(python)
  10. 六万字带你一次性速通python爬虫基础