spring boot爬坑之旅途--数据源配置整合druid(2)

项目结构如下:


启动入口:

package com.zm.blog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.github.tobato.fastdfs.FdfsClientConfig;
//解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
//整合fastdsf
@Import(FdfsClientConfig.class)
//启动入口
@SpringBootApplication
//配置servlet
@ServletComponentScan
//事务
@EnableTransactionManagement
public class BlogStart {
	public static void main(String[] args) {
		SpringApplication.run(BlogStart.class, args);
	}
}

application.properties

##############servlet容器#####################################################
server.port=80
server.context-path=/blog
##############应用编码#####################################################
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
###################################################################
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#spring.thymeleaf.prefix=/WEB-INF/jsp/
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=LEGACYHTML5
#######################################驱动配置信息  
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 
spring.datasource.url=jdbc:mysql://101.200.49.60:3306/gytlv?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=
#############################################日志####
logging.level.com.zm.blog.mapper=debug
#################################mq################
spring.activemq.broker-url=tcp://www.gytlv.com:61616

###druid不支持的补充配置 ###  
spring.datasource.driverClassName=com.mysql.jdbc.Driver  
# 初始化大小,最小,最大  
spring.datasource.initialSize=1  
spring.datasource.minIdle=1  
spring.datasource.maxActive=20  
# 配置获取连接等待超时的时间  
spring.datasource.maxWait=60000  
# 配置一个连接在池中最小生存的时间,单位是毫秒  
spring.datasource.validationQuery=SELECT 1 FROM DUAL  
spring.datasource.testOnBorrow=false  
spring.datasource.testOnReturn=false  
spring.datasource.testWhileIdle=true  
spring.datasource.minEvictableIdleTimeMillis=25200000  
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒  
spring.datasource.timeBetweenEvictionRunsMillis=60000  
spring.datasource.removeAbandoned=true  
spring.datasource.removeAbandonedTimeout=1800  
# 打开PSCache,并且指定每个连接上PSCache的大小  
spring.datasource.poolPreparedStatements=true  
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
spring.datasource.logAbandoned=true  
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
spring.datasource.filters=stat,wall,log4j 
#配置spring关联
#设置使用Cglib进行代理,因为部分需要代理的不是接口不适用于JDK动态代理,会报错
spring.aop.proxy-target-class=true
#配置Druid监控Spring包方法的调用
spring.datasource.druid.aop-patterns=packages

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=101.200.49.60
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8  
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1  
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8  
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0  
# 连接超时时间(毫秒)
#spring.redis.timeout=

#fastdsf
###################################################################
IMAGE_SERVER_URL=http://101.200.49.60:8888/
tracker_server=
###################################################################
fdfs.soTimeout=1500
fdfs.connectTimeout=600
fdfs.thumbImage.width=150
fdfs.thumbImage.height=150
fdfs.trackerList[0]=101.200.49.60:22122
####################################################################


##############servlet容器#####################################################
server.port=80
server.context-path=/blog
##############应用编码#####################################################
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
###################################################################
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#spring.thymeleaf.prefix=/WEB-INF/jsp/
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=LEGACYHTML5
#######################################驱动配置信息  
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 
spring.datasource.url=jdbc:mysql://101.200.49.60:3306/gytlv?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=
#############################################日志####
logging.level.com.zm.blog.mapper=debug
#################################mq################
spring.activemq.broker-url=tcp://www.gytlv.com:61616

###druid不支持的补充配置 ###  
spring.datasource.driverClassName=com.mysql.jdbc.Driver  
# 初始化大小,最小,最大  
spring.datasource.initialSize=1  
spring.datasource.minIdle=1  
spring.datasource.maxActive=20  
# 配置获取连接等待超时的时间  
spring.datasource.maxWait=60000  
# 配置一个连接在池中最小生存的时间,单位是毫秒  
spring.datasource.validationQuery=SELECT 1 FROM DUAL  
spring.datasource.testOnBorrow=false  
spring.datasource.testOnReturn=false  
spring.datasource.testWhileIdle=true  
spring.datasource.minEvictableIdleTimeMillis=25200000  
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒  
spring.datasource.timeBetweenEvictionRunsMillis=60000  
spring.datasource.removeAbandoned=true  
spring.datasource.removeAbandonedTimeout=1800  
# 打开PSCache,并且指定每个连接上PSCache的大小  
spring.datasource.poolPreparedStatements=true  
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
spring.datasource.logAbandoned=true  
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
spring.datasource.filters=stat,wall,log4j 
#配置spring关联
#设置使用Cglib进行代理,因为部分需要代理的不是接口不适用于JDK动态代理,会报错
spring.aop.proxy-target-class=true
#配置Druid监控Spring包方法的调用
spring.datasource.druid.aop-patterns=packages

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=101.200.49.60
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8  
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1  
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8  
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0  
# 连接超时时间(毫秒)
#spring.redis.timeout=

#fastdsf
###################################################################
IMAGE_SERVER_URL=http://101.200.49.60:8888/
tracker_server=
###################################################################
fdfs.soTimeout=1500
fdfs.connectTimeout=600
fdfs.thumbImage.width=150
fdfs.thumbImage.height=150
fdfs.trackerList[0]=101.200.49.60:22122
####################################################################


1.使用druid进行数据库访问

1.1基于resource.properties配置初始化数据源属性

package com.zm.blog.config.druid;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.Advisor;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;
import org.springframework.beans.factory.annotation.Value;
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.spring.stat.DruidStatInterceptor;

@Configuration
public class DruidConfig {
	private static final Logger LOGGER = LoggerFactory.getLogger(DruidConfig.class);

	@Value("${spring.datasource.driverClassName}")
	private String driverClassName;
	@Value("${spring.datasource.url}")
	private String url;
	@Value("${spring.datasource.username}")
	private String username;
	@Value("${spring.datasource.password}")
	private String password;
	@Value("${spring.datasource.initialSize}")
	private int initialSize;
	@Value("${spring.datasource.minIdle}")
	private int minIdle;
	@Value("${spring.datasource.maxActive}")
	private int maxActive;
	@Value("${spring.datasource.maxWait}")
	private int maxWait;
	@Value("${spring.datasource.validationQuery}")
	private String validationQuery;
	@Value("${spring.datasource.testOnBorrow}")
	private boolean testOnBorrow;
	@Value("${spring.datasource.testOnReturn}")
	private boolean testOnReturn;
	@Value("${spring.datasource.testWhileIdle}")
	private boolean testWhileIdle;
	@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
	private int timeBetweenEvictionRunsMillis;
	@Value("${spring.datasource.minEvictableIdleTimeMillis}")
	private int minEvictableIdleTimeMillis;
	@Value("${spring.datasource.removeAbandoned}")
	private boolean removeAbandoned;
	@Value("${spring.datasource.removeAbandonedTimeout}")
	private int removeAbandonedTimeout;
	@Value("${spring.datasource.logAbandoned}")
	private boolean logAbandoned;
	@Value("${spring.datasource.filters}")
	private String filters;
	@Value("${spring.datasource.poolPreparedStatements}")
	private boolean poolPreparedStatements;
	@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
	private int maxPoolPreparedStatementPerConnectionSize;

	// 添加aop的advice
	@Bean
	public DruidStatInterceptor druidStatInterceptor() {
		DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor();
		return druidStatInterceptor;
	}

	// 添加aop的pointcut
	@Bean
	public JdkRegexpMethodPointcut jdkRegexpMethodPointcut() {
		JdkRegexpMethodPointcut jdkRegexpMethodPointcut = new JdkRegexpMethodPointcut();
		jdkRegexpMethodPointcut.setPatterns(new String[] {"com.zm.blog.uib.service.*","com.zm.blog.uib.controller.*"});
		return jdkRegexpMethodPointcut;
	}

	// 设置默认的aop配置对应的是原来的<aop:advisor>
	@Bean
	public Advisor druidAdvisor() {
		DefaultPointcutAdvisor defaultPointcutAdvisor = new DefaultPointcutAdvisor();
		defaultPointcutAdvisor.setPointcut(jdkRegexpMethodPointcut());
		defaultPointcutAdvisor.setAdvice(druidStatInterceptor());
		return defaultPointcutAdvisor;
	}

	@Bean
	@Primary
	public DataSource dataSource() {
		DruidDataSource datasource = new DruidDataSource();

		datasource.setDriverClassName(driverClassName);
		datasource.setUrl(url);
		datasource.setUsername(username);
		datasource.setPassword(password);
		// 其它配置
		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) {
			LOGGER.error("druid configuration initialization filter", e);
		}
		return datasource;
	}
}

1.2配置使用druid使用的过滤器

package com.zm.blog.config.druid;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import com.alibaba.druid.support.http.WebStatFilter;

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
    @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
})
public class DruidStatFilter extends WebStatFilter{
	
}

1.3 servlet配置

package com.zm.blog.config.druid;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import com.alibaba.druid.support.http.StatViewServlet;

@WebServlet(urlPatterns = "/druid/*", 
initParams={
        //@WebInitParam(name="allow",value="127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
        //@WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)
        @WebInitParam(name="loginUsername",value="admin"),// 用户名
        @WebInitParam(name="loginPassword",value="isadmin"),// 密码
        @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
})
public class DruidStatViewServlet extends StatViewServlet {

	private static final long serialVersionUID = 1L;

}
备注:下文的举出配置都是基于resource.properties文件

猜你喜欢

转载自blog.csdn.net/z3133464733/article/details/80158065