zoukankan      html  css  js  c++  java
  • druid 的应用(密码加密),logback的应用


    参考博客:https://github.com/yjmyzz/spring-mybatis-multidatasource
    http://www.cnblogs.com/dream-to-pku/p/6367396.html
    http://itindex.net/detail/50100-druid
    http://blog.csdn.net/yingxiake/article/details/51274426
    http://www.cnblogs.com/wuyun-blog/p/5679073.html
    http://www.cnblogs.com/plan123/p/5652384.html
    http://blog.csdn.net/sdmxdzb/article/details/51096752
    http://www.cnblogs.com/wuyun-blog/p/5674244.html
    1.版本:
    <!-- druid 版本号 -->
    <druid.version>1.0.29</druid.version>
    <!--日志 s-->
    <logback.version>1.2.3</logback.version>
    <slf4j.version>1.7.7</slf4j.version>
    <!--日志 s-->
    2.logback.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
    <!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
    <!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
    <!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    
        <!-- 动态日志级别 -->
        <jmxConfigurator/>
    
        <!-- 定义日志文件 输出位置 -->
        <property name="log_dir" value="c:/log"/>
    
        <!-- 日志最大的历史 30天 -->
        <property name="maxHistory" value="30"/>
    
        <!--<!– ConsoleAppender 控制台输出日志 –>-->
        <!--<appender name="console" class="ch.qos.logback.core.ConsoleAppender">-->
        <!--<encoder>-->
        <!--<pattern>-->
        <!--<!– 设置日志输出格式 –>-->
        <!--%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n-->
        <!--</pattern>-->
        <!--</encoder>-->
        <!--</appender>-->
    
        <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <Encoding>UTF-8</Encoding>
            <!--
            日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度
            %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息,%n是换行符
            -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </layout>
        </appender>
    
    
        <!-- ERROR级别日志 -->
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
        <appender name="ERROR"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤器,只记录WARN级别的日志 -->
            <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 设置过滤级别 -->
                <level>ERROR</level>
                <!-- 用于配置符合过滤条件的操作 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 -->
                <onMismatch>DENY</onMismatch>
            </filter>
            <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志输出位置 可相对、和绝对路径 -->
                <fileNamePattern>
                    ${log_dir}/error/%d{yyyy-MM-dd}/error-log.log
                </fileNamePattern>
                <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>
                    <!-- 设置日志输出格式 -->
                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
                </pattern>
            </encoder>
        </appender>
    
    
        <!-- WARN级别日志 appender -->
        <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 过滤器,只记录WARN级别的日志 -->
            <!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <!-- 设置过滤级别 -->
                <level>WARN</level>
                <!-- 用于配置符合过滤条件的操作 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 -->
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志输出位置 可相对、和绝对路径 -->
                <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
    
        <!-- INFO级别日志 appender -->
        <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
    
        <!-- DEBUG级别日志 appender -->
        <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
    
        <!-- TRACE级别日志 appender -->
        <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern>
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
            </encoder>
        </appender>
    
    
        <!-- root级别   DEBUG -->
        <root>
            <!-- 打印debug级别日志及以上级别日志 -->
            <level value="debug"/>
            <!-- 控制台输出 -->
            <appender-ref ref="console"/>
            <!-- 文件输出 -->
            <appender-ref ref="ERROR"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="DEBUG"/>
            <appender-ref ref="TRACE"/>
        </root>
    </configuration>
    

      3.applicationContext-beans.xml

     <!-- 1. 加载数据库配置的属性文件 -->
    
        <bean id="propertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:/druid.properties</value>
                </list>
            </property>
        </bean>
    
    
        <!--2. 数据源dataSource-->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init">
            <!-- 数据库基本信息配置 -->
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
            <property name="driverClassName" value="${driverClassName}"/>
    
            <!-- 最大并发连接数 -->
            <property name="maxActive" value="${maxActive}"/>
            <!-- 初始化连接数量 -->
            <property name="initialSize" value="${initialSize}"/>
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="${maxWait}"/>
            <!-- 最小空闲连接数 -->
            <property name="minIdle" value="${minIdle}"/>
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/>
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"/>
            <property name="validationQuery" value="${validationQuery}"/>
            <property name="testWhileIdle" value="${testWhileIdle}"/>
            <property name="testOnBorrow" value="${testOnBorrow}"/>
            <property name="testOnReturn" value="${testOnReturn}"/>
    
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="true"/>
            <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}"/>
    
            <!-- 打开 removeAbandoned 功能 -->
            <property name="removeAbandoned" value="${removeAbandoned}"/>
            <!-- 1800 秒,也就是 30 分钟 -->
            <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
            <!-- 关闭 abanded 连接时输出错误日志 -->
            <property name="logAbandoned" value="${logAbandoned}"/>
    
            <property name="filters" value="${filters}"/>
            <!-- 解密密码必须要配置的项 -->
            <!--<property name="filters" value="config" />-->
            <!--<property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publicKey}" />-->
    
            <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
            <property name="defaultAutoCommit" value="true"/>
            <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
            <property name="proxyFilters">
                <list>
                    <ref bean="logFilter"/>
                </list>
            </property>
        </bean>
        <bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
            <property name="statementExecutableSqlLogEnable" value="false"/>
        </bean>
    

      注意: 当用密码加密时,

    <property name="filters" value="config" />
    此时的,sql监测时无效的;

    4.druid.properties

    url:jdbc:oracle:thin:@127.0.0.1:1521:ORCL  
    driverClassName:oracle.jdbc.driver.OracleDriver
    username:user_lpj_jk
    #publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANllcuFVnNZcdh0N/ZaowiQGqe6+9JGh/D6mzJ8g7C2GHjGVmmcUo7btUWj/y9ZqYO7uu518KCa6wjfRHwDMl38CAwEAAQ==
    #password:m5DQdPjy25cTIJbNjusmbZ1CVGIcKQ2USgAy5LGIQrNdkxiqN27cEb2qSlm1i5wzoVFWUPZx/rV+EttH4tHtlA==
    filters:stat
    #监控统计用的filter:stat
    #日志用的filter:log4j
    #防御sql注入的filter:wall
    maxActive:20  
    initialSize:1  
    maxWait:60000  
    minIdle:10  
    #maxIdle:15  
    timeBetweenEvictionRunsMillis:60000  
    minEvictableIdleTimeMillis:300000  
    validationQuery:select 1 from dual
    #validationQuery:SELECT 'x'
    testWhileIdle:true
    testOnBorrow:false
    testOnReturn:false
    #poolPreparedStatements:true
    maxOpenPreparedStatements:20
    removeAbandoned:true
    removeAbandonedTimeout:1800
    logAbandoned:true
    

      注意:oracle 为 validationQuery:select 1 from dual

    
    
  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/jwlfpzj/p/6850269.html
Copyright © 2011-2022 走看看