Java 服务端开发笔记

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 包。

web_add_lib.jpg

参考:

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345