2020年9月27日
因为涉及spring版本问题,这里的踩坑记录适合于:
spring boot 2.3.4.RELEASE
thymeleaf 3.0.2.RELEASE
其他版本自行分辨
运行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。
运行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中的。
所用它两具体用谁,看你的依赖用的哪个版本
在新的版本中 logging.file 和 logging.path 过时,要使用以下两个:
logging.file.name 可以指定路径和log文件的名字
logging.file.path 只可以只当log的路径, 不能指定log的名字, 使用默认命名spring.log
两个不能同时使用,同时配置了,只有logging.file.name生效
报错原因Hibernate4.3以后不支持@Table(name=“tablename”),
请使用@Entity(name=“tablename”)代替@Table(name=“tablename”)。
JPA是Hibernate遵循的规范之一
如下图
这个是idea检测出来的,实际并不影响运行,错误的原因是因为注解的字段没有与idea的数据连接进行关联。
解决步骤:
1、找到Persistence》右击sessionFaccory》点击Assign Data Sources
2、选择对应的数据库
然后这个报错就没有了
翻译:’@Query’不能应用在字段上。
在sql代码里,?后面有数字,数字不能直接接;分号,要加个空格
遇到Error parsing JSON response这样的错误
解决办法1:修改HTTP Proxy
注意最后这里输入的是:https://start.spring.io
必须有是https
解决办法2:创建时该地址为https://start.aliyun.com
可以直接用浏览器访问https://start.aliyun.com
建好项目,下载,然后再用idea打开就可以了
类似这样的错误
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解决了这个问题 )
使用node.js发布静态资源
1、下载node.js
https://nodejs.org/zh-cn/
然后直接安装就可以了
2、检查是否有npm
安装完成,在cmd输入npm -v
成功显示版本表示有
3、发布静态资源
在cmd输入npx http-server c:/html/
需要注意,nginx的config文件,用记事本编辑后一旦有中文并保存后,记事本会将配置文件转为带BOM头的文件。容易报错,Linux下使用vim编辑、windows下建议使用一些代码编辑软件去写。
使用外置tomcat发布spring参考:
https://segmentfault.com/a/1190000015173569?utm_source=sf-related
springboot工程打成jar包后运行时,读取外部的配置文件
https://blog.csdn.net/whuzjn/article/details/106921960
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
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 {
@Override
public 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了
@Service
public class yy {
@Value("${spring.application.name}")
private String mmm;
public void mu() {
System.out.println(mmm);
}
}
使用@Value有几个条件
如果想让静态方法获取值,可以利用一个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);
}
}