关于日志表的自动创建及分表储存

虽然项目经历觉得这样做不妥,但还是觉得有必要记录一下。

主要思路就是:

数据表名格式在自己规定好的,如:sys_log_2018,2018是获取当前年份;

添加数据时会判断数据库是否存在这张表,如果存在,则会添加数据,如果不存在,则会根据年份重新创建一个新的物理表;

创建表的代码如下

/**
    * 创建表
    * @param tableName
    */
   public void createTmpTable(@Param(value="tableName")String tableName);

创建表的sql如下:

<update id="createTmpTable" parameterType="string">
        CREATE TABLE ${tableName}(         
        id VARCHAR2(64) not null,
        log_type VARCHAR2(64),  
        title NVARCHAR2(500),  
        create_by VARCHAR2(64),  
        create_date TIMESTAMP(6),  
        remote_addr VARCHAR2(255),  
        user_agent VARCHAR2(255),  
        request_uri VARCHAR2(255),  
        method VARCHAR2(5),  
        params CLOB,  
        exception CLOB,
        operate_type VARCHAR2(64),  
        content CLOB,
         PRIMARY KEY (id)     
        )
 </update>

查询表名:

public List<String> findAllTableNames();
<
select id="findAllTableNames" resultType="String"> <![CDATA[ select table_name from user_tables ]]> </select>
public static void saveLog(HttpServletRequest request, Log log){
   LogService logService = (LogService) ContextLoader.getCurrentWebApplicationContext()
            .getBean("logService");
//查询所有表名 List
<String> list = logService.findAllTableNames(); String tableName = "sys_log_" + DateUtils.getYear(); if (!list.contains(tableName.toUpperCase())) { logService.createTmpTable(tableName); } User user = UserUtils.getUser(); if (user != null && user.getId() != null){ log.setCreateBy(user); log.setRemoteAddr(com.thinkgem.jeesite.common.utils.StringUtils.getRemoteAddr(request)); log.setUserAgent(request.getHeader("user-agent")); log.setRequestUri(request.getRequestURI()); log.setParams(request.getParameterMap()); log.setMethod(request.getMethod()); log.setCreateDate(user.getLoginDate()); log.preInsert(); log.setTableName(tableName); logDao.insert(log); } }

 

转载于:https://www.cnblogs.com/person008/p/9032286.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值