15、更新数据库报错
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed\n; SQL []; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed"
原因是没有加 @Transaction 注解,加上就可以了
14、MySQL 下划线式字段名(如:u_name)与 Java POJO 驼峰式字段名(如:uName)自动映射
环境:Spring Boot + MySQL + MyBatis + *_mapper.xml 配置
在 application.yml
中增加配置 mybatis.configuration.map-underscore-to-camel-case=true
即可
13、SpringMVC报错:No converter found for return value of type: class java.util.ArrayList
原因:SpringMVC 默认没有提供对象转 json
解决:添加 fastjson 等转换依赖,并在 <mvc:annotation-driven> 中配置
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
12、集成 MyBatis 报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
大致是没有找到对应的 Mapper,原因 mapper.xml 的目录名称写成了 com.demo.mapper 这种形式,实际上创建时应该写成 com/demo/mapper,本地是分级的目录,只是在 IDEA 工程中显示为 com.demo.mapper
11、访问 controller 中的方法 404
别忘了在 web.xml 中配置 SpringMVC 的前端控制器 DispatcherServlet
10、Maven 的 tomcat7:run 插件,运行起来之后立即停止
原因:web 项目的打包方式没有修改为 war
9、IDEA package 下右键不能创建 java class
原因:package 名不符合规范,如带有数字,则右键菜单中不会出现创建 java class 选项
8、Spring Boot 项目启动报错
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
... 48 common frames omitted
Caused by: java.lang.NullPointerException: null
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_241]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_241]
at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:589) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:817) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1229) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1225) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:90) ~[druid-1.1.10.jar:1.1.10]
at io.seata.rm.datasource.DataSourceProxy.init(DataSourceProxy.java:66) ~[seata-all-0.7.1.jar:0.7.1]
at io.seata.rm.datasource.DataSourceProxy.<init>(DataSourceProxy.java:61) ~[seata-all-0.7.1.jar:0.7.1]
at io.seata.rm.datasource.DataSourceProxy.<init>(DataSourceProxy.java:50) ~[seata-all-0.7.1.jar:0.7.1]
at com.changgou.goods.config.DataSourceConfiguration.dataSource(DataSourceConfiguration.java:26) ~[classes/:na]
at com.changgou.goods.config.DataSourceConfiguration$$EnhancerBySpringCGLIB$$38399d80.CGLIB$dataSource$0(<generated>) ~[classes/:na]
at com.changgou.goods.config.DataSourceConfiguration$$EnhancerBySpringCGLIB$$38399d80$$FastClassBySpringCGLIB$$4d5ff5c1.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.7.RELEASE.jar:5.1.7.RELEASE]
at com.changgou.goods.config.DataSourceConfiguration$$EnhancerBySpringCGLIB$$38399d80.dataSource(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_241]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_241]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
... 49 common frames omitted
Disconnected from the target VM, address: '127.0.0.1:50223', transport: 'socket'
Process finished with exit code 1
原因为配置类的前缀少了druid,修改为
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DruidDataSource ds0() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
参考 http://www.classinstance.cn/detail/111.html
7、访问微服务报错:java.net.SocketException: Can't connect to SOCKS proxy:Connection refused (Connection refused)
原因:应该是开启了代理的缘故,关闭代理、重启服务后恢复正常访问。
6、报错:java.lang.ClassNotFoundException
诡异的问题:Web 项目,在包 abc.def 下定义一个类 AClass,运行正常,然后将包改为 com.abc.def ,类名不变,全限定名为 com.abc.def.AClass,编译没有问题,但是运行时使用到 AClass 时就会报错误 java.lang.ClassNotFoundException: abc.def.AClass. clean 清除缓存也没有作用。后面查看错误日志,调用栈里面有 redis,原来是因为之前有将 abc.def.AClass 数据存入 redis,现在再访问 redis 中的这些数据,因为类已经不存在了,才会报错。解决办法为将 redis 中的数据清除,重新存入和访问。
5、Spring Cloud 微服务之间通过 Feign 调用报错:
feign.FeignException: status 405 reading AddressFeign#list(String)
at feign.FeignException.errorStatus(FeignException.java:78) ~[feign-core-10.1.0.jar:na]
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:93) ~[feign-core-10.1.0.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:149) ~[feign-core-10.1.0.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) ~[feign-core-10.1.0.jar:na]
.......
其中 Feign 接口定义如下:
@GetMapping("/list")
public Result<List<Address>> list(String username);
以上写法为错误写法,以下是正确写法(增加 @RequestParam("username"))
@GetMapping("/list")
public Result<List<Address>> list(@RequestParam("username") String username);
原因:Stack Overflow 上的解释
By default, any parameter to a feign method is treated as the body, so your checkFormat() method will send a post because it has a body (a get cannot).
4、Spring Boot 工程中,src/resources/templates 目录下的 .html 文件不能直接通过 url 访问,而需要通过 controller 路径访问。
注意:工程必须添加 thymeleaf 依赖(spring-boot-starter-thymeleaf),否则即使通过 controller 也无法访问!
3、Maven 工程编译遇到以下问题:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project spring_security_demo: Fatal error compiling: 无效的目标发行版: 13 -> [Help 1]
大致是 java 版本不对的问题,本机 java 版本为 1.8,但是设置了所有能设置的 java 版本为 1.8 都没用(包括工程设置及 IDEA 设置),仍然报这个错。后面改了 .pom 文件,添加插件,显式指定 Maven 所使用的 java 编译器版本号为 1.8,才解决问了问题。
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
2、Maven web 项目中运行时找不到 pom.xml 引入的框架中的类
如报错:java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
原因是没有把导入的框架放到 WEB-INF 下的 lib 目录。
解决方法:打开 Project Structure,选中 Artifacts,选中项目/模块名,鼠标右键点击右侧 Available Elements 下的模块名,在弹出框中点击 Put into Output Root,这样左侧 WEB-INF 目录下就有了 lib 目录,且包含导入的第三方框架 jar 包。
参考:
- https://www.cnblogs.com/binye-typing/p/6295728.html
-
https://blog.csdn.net/IT_TIfarmer/article/details/84306014
1)全局修改,$MAVEN_HOME/conf/setting.xml,
2)仅针对当前用户修改,~/.m2/setting.xml
取决于 maven 配置使用哪个 xml 文件。
以 IntelliJ IDEA 为例
1、解决:[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
第一种解决方案:修改工程的 pom.xml 文件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
其中 13 代表本地 java 版本
第二种方案:修改 Maven 的配置文件 setting.xml。
在 <profiles> 中添加如下内容
<profile>
<id>jdk-13</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>13</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
</profile>