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


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

    主要思路就是:

    数据表名格式在自己规定好的,如: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); } }
  • 相关阅读:
    JS知识点简单总结
    Js答辩总结
    JS答辩习题
    轮播
    jQuery选择器总结
    JS的魅力
    JS与JAVA数据类型的区别
    单表查询、多表查询、虚拟表连接查询
    Mysql基本语句
    Mysql数据库
  • 原文地址:https://www.cnblogs.com/person008/p/9032286.html
Copyright © 2020-2023  润新知