首先 service层的增、删、改操作前要加注解@Transactonal,如下
@Transactional
public void saveErpProductType(ErpProductType erpProductType) {
erpProductTypeDao.saveOrUpdate(erpProductType);
}
这样,当此方法出现异常时,会抛出异常,在Controller层捕获,此时,在Controller层就需要用try和catch处理,使数据库不不发生事务,如下
private static final Logger log = Logger.getLogger(ProductTypeAction.class);//括号里ProductTypeAction.class是当前Controller类
@RequiresPermissions(value = { "1465801690631" })
@RequestMapping(value = "/saveProductType")
public ModelAndView validateTypeName(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 类型
ErpProductType erpProductType = new ErpProductType();
String typeName = request.getParameter("typeName").trim();
erpProductType.setTypeCode(erpProductTypeService.getMaxProductTypeFromMemory());
erpProductType.setTypeName(typeName);
ErpUser loginUser = (ErpUser) request.getSession().getAttribute(Constant.USER);
String marketNo = loginUser.getMarketNo();
try {
erpProductTypeService.saveErpProductType(erpProductType); // 存入数据库
LoadOnStartService.erpProductTypeTable.put(erpProductType.getId(), erpProductType); // 更新内存
LoadOnStartService.refreshMarketDataTable(marketNo, Constant.ONE);
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "保存成功");
response.getWriter().write(jsonObject.toString());
return null;
} catch (Exception e) {
log.info(e.getMessage());
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", "保存失败");
response.getWriter().write(jsonObject.toString());
return null;
}
}
另外,就是log的配置文件了,如下是xml方式,网上还有propertis的配置方式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- 根logger的设置 OFF,ERROR,WARN,INFO,DEBUG -->
<root>
<priority value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="myFile" />
</root>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d - %c -%-4r [%t] %-5p %x - %m%n" />
</layout>
<!--限制输出级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR" />
<param name="LevelMin" value="TRACE" />
</filter>
</appender>
<appender name="myFile"
class="org.apache.log4j.DailyRollingFileAppender">
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="info" />
<param name="levelMax" value="error" />
<param name="AcceptOnMatch" value="true" />
</filter>
<param name="File" value="${erp.root}/logs/today.log" /><!-- 设置日志输出文件名 -->
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c] %m%n" />
</layout>
</appender>
</log4j:configuration>