Tomcat配置druid完整版福利来啦

Tomcat配置druid有两种配置方式

  • tomcat中植入
    应用无需关心druid的配置
  • 项目应用中依赖
    应用来管理druid的配置

1. TOMCAT中植入

1.1. Tomcat依赖修改

下载druid的依赖jar,放入到tomcat/lib目录下。
有的应用可能内部有可能使用tomcat的dbcp配置,可以选择删除lib下的tomcat-dbcp.jar
概述步骤如下:

  • /home/tomcat/apache-tomcat-8.5.31/lib
    • 删除tomcat-dbcp.jar
    • 追加druid-1.1.9.jar
  • 改Tomcat web.xml配置
  • 改Tomcat context.xml配置
  • 检查项目中是否有权限拦截的,需要放开拦截,改项目的web.xml
  • 如果druid没加载上,再改catalina.properties
  • 验证地址: {ip}:{host}/{project_name}/druid/login.html

1.2. Tomcat配置

1.2.1. web.xml配置

修改tomcat下的web.xml,里面增加druid配置:
以下内容增加在web.xml中的servlet的default配置后面。

<!-- druid view -->
<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <!-- 允许清空统计数据 -->
        <param-name>resetEnable</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <!-- 用户名 -->
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
    </init-param>
    <init-param>
        <!-- 密码 -->
        <param-name>loginPassword</param-name>
        <param-value>admin</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- druid view -->

以下内容增加在Built In Filter Definitions注释下面。

<!-- 连接池 启用 Web 监控统计功能    start-->
<filter>
    <filter-name>DruidWebStatFilter</filter-name >
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class >
    <init-param>
        <param-name>exclusions</param-name >
        <param-value>*.js ,*.gif ,*.jpg ,*.png ,*.css ,*.ico ,*.map,/druid/*</param-value >
    </init-param >
    <init-param>
        <param-name>sessionStatMaxCount</param-name>
        <param-value>2000</param-value>
    </init-param>
    <init-param>
        <param-name>sessionStatEnable</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>principalSessionName</param-name>
        <param-value>session_user_key</param-value>
    </init-param>
    <init-param>
        <param-name>profileEnable</param-name>
        <param-value>true</param-value>
    </init-param>
</filter >
<filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name >
    <url-pattern>/*</url-pattern >
</filter-mapping >
<!-- 连接池 启用 Web 监控统计功能   end-->

1.2.2. context.xml配置

只需要将source中的factory修改为:com.alibaba.druid.pool.DruidDataSourceFactory
参考配置如下:

<Resource name="prpDataSource"
          auth="Container"
          type="javax.sql.DataSource"
          factory="com.alibaba.druid.pool.DruidDataSourceFactory"
          defaultTransactionIsolation="READ_COMMITTED"
          username="用户名"
          password="密码"
          filters="stat,wall"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@ip:端口:service"
          maxActive="96"
          minIdle="8"
          removeabandoned="true"
          removeabandonedtimeout="60"
          logabandoned="true">
</Resource>

1.3 如果druid没加载上,再改catalina.properties

* catalina.properties
* 增加druid-1.1.9.jar

在这里插入图片描述

1.4. 项目web.xml配置

检查项目中是否有对html、css、js以及地址的拦截,如果涉及权限部分需要放开或者增加用户访问权限。
在这里插入图片描述

2. 项目中增加依赖

2.1. 依赖引入

如果之前使用dbcp系列数据源的,需要增加以下配置:

<dependency>
    <groupId>com.alibaba.druid</groupId>
    <artifactId>druid-wrapper</artifactId>
    <version>0.2.9</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
</dependency>

由于druid依赖log4j,项目中没有引入log4j的,需要引入log4j。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.8</version>
</dependency>

注意:以上顺序要保证wrapper在上面!
注意:pom中需要解决jar包冲突问题!
注意:有的应用可能内部有可能使用tomcat的dbcp配置,可以选择删除lib下的tomcat-dbcp.jar

2.2. 数据源配置

在tomcat的context的配置调整如下:

<Resource name="prpDataSource"
          auth="Container"
          type="javax.sql.DataSource"
          factory="com.alibaba.druid.pool.DruidDataSourceFactory"
          defaultTransactionIsolation="READ_COMMITTED"
          username="用户名"
          password="密码"
          filters="stat,wall"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@ip:端口:service"
          maxActive="96"
          minIdle="8"
          removeabandoned="true"
          removeabandonedtimeout="60"
          logabandoned="true">
</Resource>

2.3. web.xml配置

在web.xml顶部增加以下配置:

<!--Oracle数据库JNDI数据源引用 -->
<resource-ref>
    <description>Oracle DB Connection</description>
    <res-ref-name>jdbc/OracleDataSource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

在web.xml的filter第一行增加以下配置:

<!-- 连接池 启用 Web 监控统计功能    start-->
<filter>
    <filter-name>DruidWebStatFilter</filter-name >
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class >
    <init-param>
        <param-name>exclusions</param-name >
        <param-value>*.js ,*.gif ,*.jpg ,*.png ,*.css ,*.ico ,*.map,/druid/*</param-value >
    </init-param >
    <init-param>
        <param-name>sessionStatMaxCount</param-name>
        <param-value>2000</param-value>
    </init-param>
    <init-param>
        <param-name>sessionStatEnable</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>principalSessionName</param-name>
        <param-value>session_user_key</param-value>
    </init-param>
    <init-param>
        <param-name>profileEnable</param-name>
        <param-value>true</param-value>
    </init-param>
</filter >
<filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name >
    <url-pattern>/*</url-pattern >
</filter-mapping >
<!-- 连接池 启用 Web 监控统计功能   end-->

在web.xml的selvlet第一行增加以下配置:

<!-- druid view -->
<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <!-- 允许清空统计数据 -->
        <param-name>resetEnable</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <!-- 用户名 -->
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
    </init-param>
    <init-param>
        <!-- 密码 -->
        <param-name>loginPassword</param-name>
        <param-value>admin</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- druid view -->

项目中的web.xml
如果项目中有使用Authorization权限拦截的,需要在白名单中配置/druid/路径:

<filter>
    <filter-name>Authorization</filter-name>
    <filter-class>
        com.sinosoft.common.AuthorizationFilter
    </filter-class>
    <init-param>
        <param-name>loginPage</param-name>
        <param-value>/index.html</param-value>
    </init-param>
    <init-param>
        <param-name>valid</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>ignore</param-name>
        <param-value>
            /login.do;
            /claim/swfFlowBeforeQuery.do;
            /interFaces/;
            /prpall/;
            /www/;
            /druid/;
        </param-value>
    </init-param>
</filter>

注意:web.xml有加载顺序,所以一定要按照顺序配置!

3. 页面访问

3.1. 登陆界面

{ip}:{host}/{project_name}/druid/login.html
示例图:
在这里插入图片描述
用户名密码,请参考web.xml中的loginUsername属性

3.2. 首页

示例图:
在这里插入图片描述

3.3. 数据源页面

不一一截图了,首页里得菜单大家可以挨个看看

注意:页面不展示时,可能由于你的配置有问题,可能出现jar包冲突、数据源未加载或者被其他拦截器给重定向到其他页面!

4. 官方资料

Druid官方资料地址

5. 需要关注的源码类

DruidDataSourceFactory
 //这里面有属性值,忘记的时候可以记得上这里面找    官网资料更详细一些
 //关于事务等级的配置,也可以找到

示例图1,常用属性:
在这里插入图片描述
示例图2,事务隔离级别:
在这里插入图片描述

6. 常见问题

  • jar冲突,可以通过idea的maven helper插件来解决,如果是eclipse,可以在maven工具里找到红色线条进行移除
  • 加载顺序问题,可以多次调整顺序进行测试。这里建议启动的时候不用过idea启动,直接通过tomcat启动。
  • 页面访问不到问题,优先排查filter拦截器是否被拦截,再在源码中打断点,关注源码是否被加载和访问。
  • idea启动tomcat,配置未生效,需要在service界面中,右键点击tomcat,选择clear centent。然后再启动。

7. 使用Druid对数据库密码加密

  • 使用以下命令生成加密数据:
    java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 密码
    会生成以下结果:

privateKey: MIIBVAIBAD。。。省略。。。7kpLdvm60qdDnQ=
publicKey: MFwwDQYJ。。。省略。。。CAwEAAQ==
password: DF8Xj。。。省略。。。bg==
只需要保存下来password和publicKey即可。

将password配置到数据源的password属性,将publicKey配置到数据源的config.decrypt.key属性上。具体可参考下文中的tomcat配置和spring项目配置。

7.1 tomcat项目配置不使用加密配置

<Resource name="prpDataSource"
auth="Container"
type="javax.sql.DataSource"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
username="userName"
password="passWrod"
maxWait="20000"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@ip:host:serviceName"
maxActive="96"
minIdle = "8"
testWhileIdle="true"
testBetweenConnectErrorMillis="60000"
minEvictableIdleTimeMillis: 30000
removeabandoned="true"
removeabandonedtimeout="60"
poolPreparedStatements="false"
maxPoolPreparedStatementPerConnectionSize="0"
useGlobalDataSourceStat="false"
testOnBorrow="false"
testOnReturn="false"
validationQuery="SELECT 1 FROM DUAL"
initialSize="1"
logabandoned="true"
filters="stat,wall"
connectionProperties="useUnicode=true;characterEncoding=UTF-8;autoReconnect=true;druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;useSSL=false></Resource>

7.2使用加密配置

<Resource name="prpDataSource"
auth="Container"
type="javax.sql.DataSource"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
username="htyw_new"
password="DF8XjS。。。省略。。。VrmDcFyLbW8bg=="
maxWait="20000"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@ip:host:serviceName"
maxActive="96"
minIdle = "8"
testWhileIdle="true"
testBetweenConnectErrorMillis="60000"
minEvictableIdleTimeMillis: 30000
removeabandoned="true"
removeabandonedtimeout="60"
poolPreparedStatements="false"
maxPoolPreparedStatementPerConnectionSize="0"
useGlobalDataSourceStat="false"
testOnBorrow="false"
testOnReturn="false"
validationQuery="SELECT 1 FROM DUAL"
initialSize="1"
logabandoned="true"
filters="config,stat,wall"
connectionProperties="useUnicode=true;characterEncoding=UTF-8;autoReconnect=true;druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;useSSL=false;config.decrypt=true;config.decrypt.key=MFwwDQ。。。省略。。。AwEAAQ==">
</Resource>

7.3 spring项目配置不使用加密配置

spring: datasource: type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://ip:host/name?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false 
username: root
password: 123456 
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 连接池的配置信息
# 初始化时建立物理连接的个数 initial-size: 3
# 连接池最小连接数 min-idle: 3
# 连接池最大连接数 max-active: 20
# 获取连接时最大等待时间,单位毫秒 max-wait: 60000
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 test-while-idle: true
# 既作为检测的间隔时间又作为testWhileIdel执行的依据 time-between-connect-error-millis: 60000
# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接 min-evictable-idle-time-millis: 30000
# 用来检测连接是否有效的sql 必须是一个查询语句
# mysql中为 select 'x'
# oracle中为 select 1 from dual validation-query: select 'x'
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-borrow: false
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true test-on-return: false
# 是否缓存preparedStatement,mysql5.5+建议开启 pool-prepared-statements: true
# 当值大于0时poolPreparedStatements会自动修改为true max-pool-prepared-statement-per-connection-size: 20
# 合并多个DruidDataSource的监控数据 use-global-data-source-stat: false
# 配置扩展插件 filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 定时输出统计信息到日志中,并每次输出日志会导致清零(reset)连接池相关的计数器。 time-between-log-stats-millis: 300000
# 配置DruidStatFilter web-stat-filter: enabled: true url-pattern: '/*' exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'
# 配置DruidStatViewServlet stat-view-servlet:
# 是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全) enabled: true url-pattern: '/druid/*'
# IP白名单(没有配置或者为空,则允许所有访问) allow: ip1,ip2
# IP黑名单 (存在共同时,deny优先于allow) deny: ip
# 禁用HTML页面上的“Reset All”功能 reset-enable: false
# 登录名 login-username: admin
# 登录密码 login-password: admin

7.4 使用加密配置

同理换密文即可

猜你喜欢

转载自blog.csdn.net/u012723183/article/details/105327543