Maven项目集成Spring boot + Mybatis + Druid 开启slf4j 输出包含SQL日志和Druid性能监控

快速创建Maven项目集成Spring boot + Mybatis + Druid 开启slf4j 输入包含SQL日志和Druid性能监控

1. 首先创建Maven项目

Maven项目集成Spring boot + Mybatis + Druid 开启slf4j 输出包含SQL日志和Druid性能监控_第1张图片

2.打开pom.xml文件添加依赖项目

其中包括spring-boot/mybatis/sfl4j-log4j/druid的依赖配置项。

注意:要是log4j生效一定要注意删除其他依赖中附带应用的log配置


		org.springframework.boot
		spring-boot-starter-parent
		1.5.9.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter-aop
		
		
			org.springframework.boot
			spring-boot-starter-cache
		
		
			org.springframework.boot
			spring-boot-starter-data-redis
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			com.oracle
			ojdbc6
			11.2.0.1.0
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
			org.springframework.boot
			spring-boot-starter-jdbc
		

		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.3.1
		
		
		
			org.springframework
			spring-context-support
		

		
			org.springframework.boot
			spring-boot-autoconfigure
		
		
		    org.slf4j
		    slf4j-api
		    1.7.25
		
		
		    org.slf4j
		    slf4j-log4j12
		    1.7.25
		    test
		

		
            com.alibaba
            druid
            1.1.12
        
		
 	 
	

3.在src/main/resources目录下创建application.properties配置spring数据源配置信息

server.port: 8082
spring.jpa.database=oracle
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.username=dev
spring.datasource.password=orcl
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

#连接池的配置信息
spring.datasource.initialSize=5  
spring.datasource.minIdle=5  
spring.datasource.maxActive=20  
spring.datasource.maxWait=60000  
spring.datasource.timeBetweenEvictionRunsMillis=60000  
spring.datasource.minEvictableIdleTimeMillis=300000  
spring.datasource.validationQuery=SELECT 1 FROM DUAL  
spring.datasource.testWhileIdle=true  
spring.datasource.testOnBorrow=false  
spring.datasource.testOnReturn=false  
spring.datasource.poolPreparedStatements=true  
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
spring.datasource.filters=stat,wall,log4j  
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true
logging.level.com.demo.mapper=DEBUG
mybatis.type-aliases-package=com.demo.entity  

4.在src/main/resources添加log4j配置logback.xml

注意名字需要匹配命名规则,否则自动配置读不到定制配置文件,其中注意后缀不能是.properties



    
    SpringBootDemo
    
    
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_error.log
        
        
            
            ${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            error
            ACCEPT
            DENY
        
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_warn.log
        
        
            
            ${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            warn
            ACCEPT
            DENY
        
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_info.log
        
        
            
            ${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            info,debug
            ACCEPT
            DENY
        
    

    
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            debug
        
    
	
    
    

    
    
        
        
        

        
        
    
    
    

5.在src/main/resources添加mybatis配置文件application-mybatis.xml

  

    
      
      
      
     
      
      
      
      
        
        
      
      
      
        
      
      
      
         
      
      
      
         
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
         
      
      
      
         
         
      
 

6. 要想开启druid监控必须添加类

package com.demo.druid;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

@Configuration
public class DruidConfiguration {

	private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
	private static final String DB_PREFIX = "spring.datasource";

	@Bean
	public ServletRegistrationBean druidServlet() {
		logger.info("init Druid Servlet Configuration ");
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
				"/druid/*");
		// IP白名单
		servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
		// IP黑名单(共同存在时,deny优先于allow)
		servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
		// 控制台管理用户
		servletRegistrationBean.addInitParameter("loginUsername", "admin");
		servletRegistrationBean.addInitParameter("loginPassword", "admin");
		// 是否能够重置数据 禁用HTML页面上的“Reset All”功能
		servletRegistrationBean.addInitParameter("resetEnable", "false");
		return servletRegistrationBean;
	}

	@Bean
	public FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
		filterRegistrationBean.addUrlPatterns("/*");
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
		return filterRegistrationBean;

	}

	// 解决 spring.datasource.filters=stat,wall,log4j 无法正常注册进去
	@ConfigurationProperties(prefix = DB_PREFIX)
	class IDataSourceProperties {
		private String url;
		private String username;
		private String password;
		private String driverClassName;
		private int initialSize;
		private int minIdle;
		private int maxActive;
		private int maxWait;
		private int timeBetweenEvictionRunsMillis;
		private int minEvictableIdleTimeMillis;
		private String validationQuery;
		private boolean testWhileIdle;
		private boolean testOnBorrow;
		private boolean testOnReturn;
		private boolean poolPreparedStatements;
		private int maxPoolPreparedStatementPerConnectionSize;
		private String filters;
		private String connectionProperties;

		@Bean // 声明其为Bean实例
		@Primary // 在同样的DataSource中,首先使用被标注的DataSource
		public DataSource dataSource() {
			DruidDataSource datasource = new DruidDataSource();
			datasource.setUrl(url);
			datasource.setUsername(username);
			datasource.setPassword(password);
			datasource.setDriverClassName(driverClassName);
			// configuration
			datasource.setInitialSize(initialSize);
			datasource.setMinIdle(minIdle);
			datasource.setMaxActive(maxActive);
			datasource.setMaxWait(maxWait);
			datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
			datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
			datasource.setValidationQuery(validationQuery);
			datasource.setTestWhileIdle(testWhileIdle);
			datasource.setTestOnBorrow(testOnBorrow);
			datasource.setTestOnReturn(testOnReturn);
			datasource.setPoolPreparedStatements(poolPreparedStatements);
			datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
			try {
				datasource.setFilters(filters);
			} catch (SQLException e) {
				System.err.println("druid configuration initialization filter: " + e);
			}
			datasource.setConnectionProperties(connectionProperties);
			return datasource;
		}

		public String getUrl() {
			return url;
		}

		public void setUrl(String url) {
			this.url = url;
		}

		public String getUsername() {
			return username;
		}

		public void setUsername(String username) {
			this.username = username;
		}

		public String getPassword() {
			return password;
		}

		public void setPassword(String password) {
			this.password = password;
		}

		public String getDriverClassName() {
			return driverClassName;
		}

		public void setDriverClassName(String driverClassName) {
			this.driverClassName = driverClassName;
		}

		public int getInitialSize() {
			return initialSize;
		}

		public void setInitialSize(int initialSize) {
			this.initialSize = initialSize;
		}

		public int getMinIdle() {
			return minIdle;
		}

		public void setMinIdle(int minIdle) {
			this.minIdle = minIdle;
		}

		public int getMaxActive() {
			return maxActive;
		}

		public void setMaxActive(int maxActive) {
			this.maxActive = maxActive;
		}

		public int getMaxWait() {
			return maxWait;
		}

		public void setMaxWait(int maxWait) {
			this.maxWait = maxWait;
		}

		public int getTimeBetweenEvictionRunsMillis() {
			return timeBetweenEvictionRunsMillis;
		}

		public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
			this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
		}

		public int getMinEvictableIdleTimeMillis() {
			return minEvictableIdleTimeMillis;
		}

		public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
			this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
		}

		public String getValidationQuery() {
			return validationQuery;
		}

		public void setValidationQuery(String validationQuery) {
			this.validationQuery = validationQuery;
		}

		public boolean isTestWhileIdle() {
			return testWhileIdle;
		}

		public void setTestWhileIdle(boolean testWhileIdle) {
			this.testWhileIdle = testWhileIdle;
		}

		public boolean isTestOnBorrow() {
			return testOnBorrow;
		}

		public void setTestOnBorrow(boolean testOnBorrow) {
			this.testOnBorrow = testOnBorrow;
		}

		public boolean isTestOnReturn() {
			return testOnReturn;
		}

		public void setTestOnReturn(boolean testOnReturn) {
			this.testOnReturn = testOnReturn;
		}

		public boolean isPoolPreparedStatements() {
			return poolPreparedStatements;
		}
		public void setPoolPreparedStatements(boolean poolPreparedStatements) {
			this.poolPreparedStatements = poolPreparedStatements;
		}

		public int getMaxPoolPreparedStatementPerConnectionSize() {
			return maxPoolPreparedStatementPerConnectionSize;
		}

		public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
			this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
		}

		public String getFilters() {
			return filters;
		}

		public void setFilters(String filters) {
			this.filters = filters;
		}

		public String getConnectionProperties() {
			return connectionProperties;
		}

		public void setConnectionProperties(String connectionProperties) {
			this.connectionProperties = connectionProperties;
		}

	}

}

7,添加mybatis dao类

package com.demo.mapper;

import java.util.List;

import javax.sql.DataSource;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.alibaba.druid.pool.DruidDataSource;
import com.demo.entity.Atest;
import com.demo.entity.TestEntity;

@Repository
@Mapper
public interface TestMapper  {
	
	@Select("select * from test ")
	@Results({
		@Result(column="tid", property="tid"),
		@Result(column="content", property="content")
	})
	public List getAll();
	
	@Insert(value = { "insert into atest (ac,attr1) values(#{ac},#{ac})" })
	public void register(Atest atest);
}

8, 添加启动类

package com.demo.schedule;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.test.context.ContextConfiguration;

@SpringBootApplication
@EnableScheduling
@MapperScan("com.demo.mapper")//指定mybatis 位置
@ComponentScan(basePackages={"com.demo.schedule","com.demo.druid","com.demo.controller","com.demo.services"})//指定Services位置(必须指定入口)
@ImportResource(value = {"classpath:application-mybatis.xml"})
public class App {
	private static final Logger logger = LoggerFactory.getLogger(App.class);
	
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
		logger.info("start");
	}
}

8.右击项目,以spring-boot app方式启动

===INFO  com.demo.schedule.App Line:57  - Started App in 4.224 seconds (JVM running for 5.207)
=== INFO  com.demo.schedule.App Line:26  - start

9.访问页面

Maven项目集成Spring boot + Mybatis + Druid 开启slf4j 输出包含SQL日志和Druid性能监控_第2张图片

11.查看日志

12.访问Druid

Maven项目集成Spring boot + Mybatis + Druid 开启slf4j 输出包含SQL日志和Druid性能监控_第3张图片

至此大工告成!

你可能感兴趣的:(java项目)