ssm框架整合步骤_bootstrap框架搭建

ssm框架整合步骤_bootstrap框架搭建描述普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过了,如果想看一下程序打出来的sql,发现参数的位置都是?,是不是很不爽,若想在数据库中执行sql,还需要手动修改sql的参数,真是麻烦,使用p6spy可以将sql格式化然后打出,打出的sql不再是带有?的,而是可以直接拷贝到数据库执行的。整合步骤如下:添加jar包依赖在service层…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan

描述

普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过了,如果想看一下程序打出来的sql,发现参数的位置都是?,是不是很不爽,若想在数据库中执行sql,还需要手动修改sql的参数,真是麻烦,使用p6spy可以将sql格式化然后打出,打出的sql不再是带有?的,而是可以直接拷贝到数据库执行的。整合步骤如下:

添加jar包依赖

在service层添加依赖: “` p6spy p6spy 3.7.0


</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">自定义输出格式</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">

package com.zh.ssm.p6spy;

import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

import java.text.SimpleDateFormat;
import java.util.Date;

/**

  • p6spy打印日志输出格式修改
  • 1.只打印最终执行的sql.
  • 2.sql换到下一行
  • 3.结尾处增加分号,以标示sql结尾

*/

public class P6SpyLogger implements MessageFormattingStrategy {

private SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”);

public P6SpyLogger() {
}
public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql) {
    return !"".equals(sql.trim())?this.format.format(new Date()) + " | took " + elapsed + "ms | " + category + " | connection " + connectionId + "\n " + sql + ";":"";
}

}

</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">配置spy.properties</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">
在service层的classpath下新建文件spy.properties,内容如下:

#%L

P6Spy

%%

Copyright © 2013 P6Spy

%%

Licensed under the Apache License, Version 2.0 (the “License”);

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an “AS IS” BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

#L%

#################################################################

P6Spy Options File

See documentation for detailed instructions

http://p6spy.github.io/p6spy/2.0/configandusage.html

#################################################################
#################################################################

MODULES

Module list adapts the modular functionality of P6Spy.

Only modules listed are active.

(default is com.p6spy.engine.logging.P6LogFactory and

com.p6spy.engine.spy.P6SpyFactory)

Please note that the core module (P6SpyFactory) can’t be

deactivated.

Unlike the other properties, activation of the changes on

this one requires reload.

#################################################################
#modulelist=com.p6spy.engine.spy.P6SpyFactory,com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
################################################################

CORE (P6SPY) PROPERTIES

################################################################

A comma separated list of JDBC drivers to load and register.

(default is empty)

Note: This is normally only needed when using P6Spy in an

application server environment with a JNDI data source or when

using a JDBC driver that does not implement the JDBC 4.0 API

(specifically automatic registration).

#driverlist=
driverlist=com.mysql.jdbc.Driver

for flushing per statement

(default is false)

#autoflush = false

sets the date format using Java’s SimpleDateFormat routine.

In case property is not set, miliseconds since 1.1.1970 (unix time) is used (default is empty)

#dateformat=

prints a stack trace for every statement logged

#stacktrace=false

if stacktrace=true, specifies the stack trace to print

#stacktraceclass=

determines if property file should be reloaded

Please note: reload means forgetting all the previously set

settings (even those set during runtime – via JMX)

and starting with the clean table

(default is false)

#reloadproperties=false
reloadproperties=true

determines how often should be reloaded in seconds

(default is 60)

#reloadpropertiesinterval=60

specifies the appender to use for logging

Please note: reload means forgetting all the previously set

settings (even those set during runtime – via JMX)

and starting with the clean table

(only the properties read from the configuration file)

(default is com.p6spy.engine.spy.appender.FileLogger)

#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#appender=com.p6spy.engine.spy.appender.FileLogger
appender=com.p6spy.engine.spy.appender.Slf4JLogger

name of logfile to use, note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log)

(used for com.p6spy.engine.spy.appender.FileLogger only)

(default is spy.log)

#logfile = spy.log

append to the p6spy log file. if this is set to false the

log file is truncated every time. (file logger only)

(default is true)

#append=true

class to use for formatting log messages (default is: com.p6spy.engine.spy.appender.SingleLineFormat)

#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
logMessageFormat=com.zh.ssm.p6spy.P6SpyLogger

format that is used for logging of the date/time/… (has to be compatible with java.text.SimpleDateFormat)

(default is dd-MMM-yy)

#databaseDialectDateFormat=dd-MMM-yy
databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss

whether to expose options via JMX or not

(default is true)

#jmx=true

if exposing options via jmx (see option: jmx), what should be the prefix used?

jmx naming pattern constructed is: com.p6spy(.)?:name=

please note, if there is already such a name in use it would be unregistered first (the last registered wins)

(default is none)

#jmxPrefix=
#################################################################

DataSource replacement

Replace the real DataSource class in your application server

configuration with the name com.p6spy.engine.spy.P6DataSource

(that provides also connection pooling and xa support).

then add the JNDI name and class name of the real

DataSource here

Values set in this item cannot be reloaded using the

reloadproperties variable. Once it is loaded, it remains

in memory until the application is restarted.

#################################################################
#realdatasource=/RealMySqlDS
#realdatasourceclass=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
#################################################################

DataSource properties

If you are using the DataSource support to intercept calls

to a DataSource that requires properties for proper setup,

define those properties here. Use name value pairs, separate

the name and value with a semicolon, and separate the

pairs with commas.

The example shown here is for mysql

#################################################################
#realdatasourceproperties=port;3306,serverName;myhost,databaseName;jbossdb,foo;bar
#################################################################

JNDI DataSource lookup

If you are using the DataSource support outside of an app

server, you will probably need to define the JNDI Context

environment.

If the P6Spy code will be executing inside an app server then

do not use these properties, and the DataSource lookup will

use the naming context defined by the app server.

The two standard elements of the naming environment are

jndicontextfactory and jndicontextproviderurl. If you need

additional elements, use the jndicontextcustom property.

You can define multiple properties in jndicontextcustom,

in name value pairs. Separate the name and value with a

semicolon, and separate the pairs with commas.

The example shown here is for a standalone program running on

a machine that is also running JBoss, so the JDNI context

is configured for JBoss (3.0.4).

(by default all these are empty)

#################################################################
#jndicontextfactory=org.jnp.interfaces.NamingContextFactory
#jndicontextproviderurl=localhost:1099
#jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.nameing:org.jnp.interfaces
#jndicontextfactory=com.ibm.websphere.naming.WsnInitialContextFactory
#jndicontextproviderurl=iiop://localhost:900
################################################################

P6 LOGGING SPECIFIC PROPERTIES

################################################################

filter what is logged

please note this is a precondition for usage of: include/exclude/sqlexpression

(default is false)

#filter=false

comma separated list of strings to include

please note that special characters escaping (used in java) has to be done for the provided regular expression

(default is empty)

#include =

comma separated list of strings to exclude

(default is empty)

#exclude =

sql expression to evaluate if using regex

please note that special characters escaping (used in java) has to be done for the provided regular expression

(default is empty)

#sqlexpression =
#list of categories to exclude: error, info, batch, debug, statement,
#commit, rollback and result are valid values

(default is info,debug,result,resultset,batch)

#excludecategories=info,debug,result,resultset,batch
excludecategories=info,debug,result,resultset

Execution threshold applies to the standard logging of P6Spy.

While the standard logging logs out every statement

regardless of its execution time, this feature puts a time

condition on that logging. Only statements that have taken

longer than the time specified (in milliseconds) will be

logged. This way it is possible to see only statements that

have exceeded some high water mark.

This time is reloadable.

executionThreshold=integer time (milliseconds)

(default is 0)

#executionThreshold=
################################################################

P6 OUTAGE SPECIFIC PROPERTIES

################################################################

Outage Detection

This feature detects long-running statements that may be indicative of

a database outage problem. If this feature is turned on, it will log any

statement that surpasses the configurable time boundary during its execution.

When this feature is enabled, no other statements are logged except the long

running statements. The interval property is the boundary time set in seconds.

For example, if this is set to 2, then any statement requiring at least 2

seconds will be logged. Note that the same statement will continue to be logged

for as long as it executes. So if the interval is set to 2, and the query takes

11 seconds, it will be logged 5 times (at the 2, 4, 6, 8, 10 second intervals).

outagedetection=true|false

outagedetectioninterval=integer time (seconds)

(default is false)

#outagedetection=false

(default is 60)

#outagedetectioninterval=30

**注意:**该文件中的logMessageFormat=com.zh.ssm.p6spy.P6SpyLogger要配置为上一步自定义输出的类
</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">修改数据库连接池配置</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">
在datasource.xml配置文件中做如下修改,添加如下代码

<bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource">
    <constructor-arg>
        <ref bean="dataSourceDefault"/>
    </constructor-arg>
</bean>

<bean id="dataSourceDefault" class="com.alibaba.druid.pool.DruidDataSource"
      destroy-method="close">
    <property name="filters" value="stat"/>

    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />

    <property name="keepAlive" value="true"/>
    <!--最大连接数-->
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="maxWait" value="60000" />
    <property name="minIdle" value="1" />
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />

    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
    <property name="poolPreparedStatements" value="true" />
    <property name="maxOpenPreparedStatements" value="20" />
    <!--配置>0时,会检查activeCount是否大于onFatalErrorMaxActive,如果大于则抛异常。-->
    <property name="onFatalErrorMaxActive" value="1" />
</bean>

</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">修改log4j.properties</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">
添加如下内容:

##p6spy
log4j.logger.p6spy=info,spyConsole
#配置p6spy打印输出到控制台并定义其格式
log4j.appender.spyConsole = org.apache.log4j.ConsoleAppender
log4j.appender.spyConsole.Target=System.out
log4j.appender.spyConsole.layout = org.apache.log4j.PatternLayout
log4j.appender.spyConsole.layout.ConversionPattern = #####—–%m%n


</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">效果展示</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">
打印出的sql格式为:

#####—–2018-07-09 20:20:30:238 | took 51ms | statement | connection 0
SELECT * FROM tb_user WHERE id = ‘1’;

</font>
<h1 id="背景"><table><tbody><tr><td bgcolor="#008B8B" height="40px"><font size="6px" face="华文新魏" color="white">博客推荐</font></td></tr></tbody></table></h1>
<font size="4px" face="楷体" font-weight="bold">

 1. 想配置更多的输出日志?请看这里:https://blog.csdn.net/lk_blog/article/details/50768287?locationNum=15&fps=1
 2. 想知道为什么如此配置数据源吗?请看:https://blog.csdn.net/sanyuedexuanlv/article/details/51331209
 3. https://www.cnblogs.com/luodengxiong/p/6766357.html

</font>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185512.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言malloc函数的用法和意义

    c语言malloc函数的用法和意义当我们需要做一个成绩管理系统,人数可能为全校学生,也可能为一个班的学生,当我们开辟一个班的数组大小时,如果要存储整个学校的人数时,会出现内存不够用的情况;当我们开辟全校人数大小的数组时,输入一个班人数的大小时,会出现内存浪费的情况。为了应对上述问题,我们引入malloc函数。malloc时动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址mallo…

    2022年4月29日
    210
  • verilog流水线设计代码_流水线cpu设计verilog

    verilog流水线设计代码_流水线cpu设计verilog介绍定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法。以面积换速度。优点:每一部分延时降低——可用更快的时钟;大部分电路同时运算——提高数据吞吐率。缺点:增加面积;流水线并不减小单个数据操作的时间,减小的是整个数据流的操作时间;(不懂)功耗增加,硬件复杂度增加,特别对于复杂逻辑如cpu的流水线而言,流水越深,发生需要hold流水线或reset流水线的情况时,时间损失越大。所以使用流水线并非有利无害,大家需权衡考虑。应用场景:1)组合逻辑太长,

    2022年8月14日
    2
  • 小程序 table_小程序下滑样式

    小程序 table_小程序下滑样式先看效果图wxml<viewclass=”mdui-m-t-2mudi-f-s-24″>1.养老保险</view><viewclass=”mdui-m-t-1mudi-indentmudi-f-s-20″>养老保险,全称社会基本养老保险,是国家和社会根据一定的法律和法规,为解决劳动者在达到国家规定的解除劳动义务的劳动…

    2022年9月15日
    0
  • GridLayout的使用

    GridLayout的使用GridLayout的使用:GridLayout的类层次结构图:java.lang.Object–java.awt.GridLayoutGridLayout比FlowLayout多了行和列的设置,也就是说你要先设置GridLayout共有几行几列,就如同二维平面一般,然后你加进去的组件会先填第一行的格子,然后再从第二行开始填,依此类扒,就像是一个个的格子一般。而

    2022年6月12日
    34
  • pythoncharm怎么改字体大小_pycharm更改字体大小

    pythoncharm怎么改字体大小_pycharm更改字体大小pycharm在File->settings中设置font大小时发现size框无法输入。查了下资料点击下上面的saveas按钮创建一个信息的模块名称就可以了。

    2022年8月26日
    4
  • 拓扑排序

    拓扑排序

    2021年12月1日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号