1.数据migration的时候一定要慎之又慎.
各种怪异的历史数据都有可能存在.
尽量多了解造成这些数据的原因来采取相应的策略做migration
2.与第三方系统做交互的时候,可以采取查询的方式,来解决长事务以及因为没有收到响应而造成多次数据异常之类的问题.
否则,若给第三方系统发送的请求无法避免,那么可以考虑在发送之前,给数据设置一个中间状态,避免没有收到响应造成数据异常.
3.在webwork2里面的interceptor是singleton的,即使在spring里面设置成prototype, 对于webwork2来说,只实例化了一次interceptor.因此在interceptor里面要使用域变量的时候要小心多线程的问题,避免多线程篡改数据。尽量使用Local variable来避免这种情况的发生.
4.在配置bean的时候,需要多注意他的scope到底是singleton的或者是prototype的,
即使是工具类也要小心,当然这是在工具类写的不够好的情况下.
5.Hibernate中的hql在做两数相加之类的(例如user.a+user.b),若其中一个为null,那么整个表达式的值为null,为避免这种情况的发生,oracle数据库中可以用nvl(column,0)的形式来将null自动转换成0值.
各种怪异的历史数据都有可能存在.
尽量多了解造成这些数据的原因来采取相应的策略做migration
2.与第三方系统做交互的时候,可以采取查询的方式,来解决长事务以及因为没有收到响应而造成多次数据异常之类的问题.
否则,若给第三方系统发送的请求无法避免,那么可以考虑在发送之前,给数据设置一个中间状态,避免没有收到响应造成数据异常.
3.在webwork2里面的interceptor是singleton的,即使在spring里面设置成prototype, 对于webwork2来说,只实例化了一次interceptor.因此在interceptor里面要使用域变量的时候要小心多线程的问题,避免多线程篡改数据。尽量使用Local variable来避免这种情况的发生.
4.在配置bean的时候,需要多注意他的scope到底是singleton的或者是prototype的,
即使是工具类也要小心,当然这是在工具类写的不够好的情况下.
5.Hibernate中的hql在做两数相加之类的(例如user.a+user.b),若其中一个为null,那么整个表达式的值为null,为避免这种情况的发生,oracle数据库中可以用nvl(column,0)的形式来将null自动转换成0值.