spring-struts2-mybatis-maven 转账开发记录
最近写一个转账需求向外提供接口,用的是spring+struts2+maven 方式,数据库是oracle。我先新建maven类,然后引入spring相关jar包和mybatis包,配置struts.xml、applicationContext.xml、log4j等;
然后写了一个测试action类,测试部署是否正确,遇到的问题大概有jar包冲突,struts中action路径错误,扫描不到dao包等等,这是前期搭建环境时的问题;
正式开发转账逻辑时,遇到的问题大概有mybatis类型不匹配,其中折腾较久的是mybatis查询数据库时,查不到数据,而用DbVisualizer、pqsql等工具可以查到。最开始猜测可能是缓存问题,最新插入的数据只存在数据还没有被缓存;
然后关闭缓存再查询,依然查不到,再猜测可能是事物原因,于是降低数据库隔离级别然后再查,结果依然查不到。 最后打印出sql,发现sql中一个字段与parameterType插入的字段不匹配!因为mybatis不打印sql并且之前测试查询sql时也可以查到,
所以就没有想过是sql原因。。
开发中还有一个折腾比较久的是注入属性,结合spring mvc的经验,我直接在spring配置中加入自动扫描组件<context:component-scan base-package="com.xxx.dao" />,然后使用注解autowired和resource均失败,然后写上被注入类的getter、
setter方法和无惨构造器,依然不行。最后又写一个测试类,一步一步测试,发现注入的类的父类构造参数有问题,加上构造器 ,然后检查applicationContext里的bean引入是否正确,遂解决。
开发后期的主要问题是多线程问题,因为之前一直没用使用多线程,后期加入多线程后,发现获取不到ActionContext,debug前后查看多线程ActionContext的值,发现线程启动前有值,新启线程后无值,然后加入voliate修饰词后便能获取值,
但是又有新问题,voliate只能让变量可见,但是不能保证线程安全,volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性,在JVM底层volatile是采用“内存屏障”来实现的。虽然通过它让ActionContext可见,但是当需要返回
http请求时,返回不了,
ActionContext ctx = ActionContext.getContext();
HttpServletResponse response =(HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(str);;
response.getWriter().flush();
response.getwriter.flush() 方法报错,猜测是因为新起的线程后,response作用域失效,找不到请求的路径,自然无法返回。
spring-struts2-mybatis-maven 转账开发记录的更多相关文章
- SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建
SSM Spring+SpringMVC+mybatis+maven环境搭建 1.首先右键点击项目区空白处,选择new->other..在弹出框中输入maven,选择Maven Project. ...
- Spring+SpringMVC+MyBatis+Maven框架整合
本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...
- 手动配置三大框架整合:Spring+Struts2+mybatis
如今主流的项目框架中,数据库持久层有可能不是hibernate,而是mybatis或者ibatis,事实上它们都是一样的,以下我来把环境搭建一下: [导入相关jar包]新建web项目projectms ...
- spring Boot + MyBatis + Maven 项目,日志开启打印 sql
在 spring Boot + MyBatis + Maven 项目中,日志开启打印 sql 的最简单方法,就是在文件 application.properties 中新增: logging.leve ...
- 整合Spring+Struts2+Mybatis加spring单元测试等
前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...
- Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建
1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...
- Spring+SpringMVC+Mybatis+Maven+CXF+WebService整合之服务端
WebService服务端项目结构: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...
- SSM整合+WebUpload使用(spring+springmvc+mybatis+maven)
SSM框架整合以及webupload的集成与使用 在项目中最近用到了webupload.js,也方方面面遇到了不少问题,比如上传文件前对表单参数校验,当校验失败不予提交,及在文件上传成功后,选择同 ...
- SSM(Spring+SpringMVC+MyBatis)框架整合开发流程
回忆了 Spring.SpringMVC.MyBatis 框架整合,完善一个小demo,包括基本的增删改查功能. 开发环境 IDEA MySQL 5.7 Tomcat 9 Maven 3.2.5 需要 ...
随机推荐
- MATLAB 大数据剔除坏值
在用MATLAB进行数据分析的时候,坏点对正确结果的影响比较大, 因此,我么需要剔除野点,对于坏值的剔除,我们 利用 3σ准则 剔除无效数据: 3σ准则又称为拉依达准则,它是先假设一组检测数据只含有 ...
- python requests库学习笔记(上)
尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...
- Entity Framework Core 使用HiLo生成主键
#cnblogs_post_body.cnblogs-markdown p img { max-width: 95%; } HiLo是在NHiernate中生成主键的一种方式,不过现在我们可以在Ent ...
- RecyclerView.ItemDecoration
decoration 英文意思: 英[ˌdekəˈreɪʃn] 美[ˌdɛkəˈreʃən] n. 装饰品; 装饰,装潢; 装饰图案,装饰风格; 奖章; [例句]The decoration and ...
- lua API函数大全
Lua5.1中的API函数 lua_State* luaL_newstate()Lua脚本的编译执行是相互独立的,在不同的线程上执行.通过luaL_newstate()函数可以申请一个虚拟机,返回指针 ...
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- 升级 WIN8.1 VC6.0和 Visual Assist 的使用问题
抱着好奇之心, 升级到了win8.1,没想到win8下 64位机器,原本可以运行的vc6.0(也就是 MSDEV.EXE)不能运行之,然后各种不痛快了. 经过从网上搜索,找到了改良办法,没想到微软想把 ...
- Spring JDBC(一)jdbcTemplate
前言 最近工作中经常使用Spring JDBC操作数据库,也断断续续的看了一些源码,便有了写一些总结的想法,希望在能帮助别人的同时,也加深一下自己对Spring JDBC的理解. Spring JDB ...
- Promise原理与实现探究的一种思路
写在前面 这个文章,展现的是一个实现Promise的思路,以及如何发现和处理问题的情境. 从现有的Promise分析 如果我们想要自己实现一个简单的Promise,那现有规范规定的Promise肯定是 ...
- 如果nginx启动失败,错误解决
解决上面问题: /usr/sbin/groupadd -f www /usr/sbin/useradd -g www www 这方法常见出现时反向代理时,ssl的授权用户不存在的情况下出现的:.