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

    
    
  • 相关阅读:
    css中优先级与层叠
    微服务通过feign.RequestInterceptor传递参数
    maven详解
    Java8新特性interface中的static方法和default方法
    设计模式六大原则---转
    MySQL主从复制作用和原理
    Mysql Binlog三种格式详细介绍
    分布式主键生成逻辑总结--转
    java幂等性的解决方案
    spring事务的传播机制新解
  • 原文地址:https://www.cnblogs.com/jwlfpzj/p/6850269.html
Copyright © 2011-2022 走看看