SpringBoot整合Druid
在整合的mybatis的基础上对工程进行改造,参考链接:
https://blog.csdn.net/qq_21067307/article/details/86292779
一、引入druid的起步依赖
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
二、设置druid相关配置
# datasource
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
#spring.datasource.username=root
#spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# druid
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.filters=stat
spring.datasource.druid.maxActive=20
spring.datasource.druid.initialSize=10
spring.datasource.druid.maxWait=60000
spring.datasource.druid.minIdle=1
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=true
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxOpenPreparedStatements=20
spring.datasource.druid.validationQuery=SELECT 1
三、启动服务验证
浏览器访问接口:
访问druid监控页面:
http://127.0.0.1:8080/druid/index.html
四、说明
(1)如果使用druid的起步依赖,就可以不用自己配置druid.url等属性配置文件
(2)springboot已经有druid的自动配置文件,如果熟悉自动配置原理,druid可以配置的参数可以参考DruidDataSource.java
(3)如果(2)不太了解,通用方法了解可以配置的参数方法如下:
在application.properties文件中,按住Ctrl点击相应属性则跳转到属性配置类,如点击spring.datasource.druid.url,
跳转到DruidDataSourceWrapper.java类
@ConfigurationProperties("spring.datasource.druid")
class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
@Autowired
private DataSourceProperties basicProperties;
...
看代码可知其继承DruidDataSource类,进入DruidDataSource.java,可以看到configFromPropety方法
public void configFromPropety(Properties properties) {
{
String property = properties.getProperty("druid.name");
if (property != null) {
this.setName(property);
}
}
{
String property = properties.getProperty("druid.url");
if (property != null) {
this.setUrl(property);
}
}
{
String property = properties.getProperty("druid.username");
if (property != null) {
this.setUsername(property);
}
}
...
这里只是举例,具体可以学习springboot自动配置原理。
五、安全
对于监控信息有必要采取安全保护,可以配置用户名跟密码、允许某些ip进行访问、拒绝某些链接进行访问等,这样对信息安全就有了一定的安全保障。
可以添加一个druid的管理页面的servlet(StatViewServlet)进行相关配置,下面介绍两种方法配置。
(1)编写配置类并注册servlet进行属性设置
配置类及注册的servlet逻辑如下:
@Configuration
public class DruidConfig {
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParam = new HashMap<>();
initParam.put("loginUsername","zrk");
initParam.put("loginPassword","123456");
// initParam.put("allow","");
// initParam.put("deny","");
bean.setInitParameters(initParam);
return bean;
}
}
重启项目,访问如下:
输入代码中设置的用户名密码即可
(2)直接通过配置文件进行配置
1、配置很简单直接修改配置文件即可,现在先看下原理:
查看druid的自动配置类DruidDataSourceAutoConfigure:
@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({ DruidStatProperties.class, DataSourceProperties.class})
@Import({ DruidSpringAopConfiguration.class,
DruidStatViewServletConfiguration.class,
DruidWebStatFilterConfiguration.class,
DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure {
private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);
@Bean(initMethod = "init")
@ConditionalOnMissingBean
public DataSource dataSource() {
LOGGER.info("Init DruidDataSource");
return new DruidDataSourceWrapper();
}
}
通过@Import注解引入了一些配置类,其中包括了DruidStatViewServletConfiguration.class :
@ConditionalOnWebApplication
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
public class DruidStatViewServletConfiguration {
@Bean
public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) {
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new StatViewServlet());
registrationBean.addUrlMappings(config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*");
if (config.getAllow() != null) {
registrationBean.addInitParameter("allow", config.getAllow());
}
if (config.getDeny() != null) {
registrationBean.addInitParameter("deny", config.getDeny());
}
if (config.getLoginUsername() != null) {
registrationBean.addInitParameter("loginUsername", config.getLoginUsername());
}
if (config.getLoginPassword() != null) {
registrationBean.addInitParameter("loginPassword", config.getLoginPassword());
}
if (config.getResetEnable() != null) {
registrationBean.addInitParameter("resetEnable", config.getResetEnable());
}
return registrationBean;
}
}
分析此配置类,注册了一个servlet,其实就是druid监控页面的servlet,registrationBean.setServlet(new StatViewServlet());
相关参数取自config变量,即properties.getStatViewServlet();,是配置文件DruidStatProperties的内部类,并且配置文件绑定了以spring.datasource.druid为前缀的属性,所以在配置文件中对其属性进行配置即可。
2、配置相关属性
spring.datasource.druid.stat-view-servlet.login-username=zrk
spring.datasource.druid.stat-view-servlet.login-password=123
将原先写的配置类注释掉,重启项目访问,输入配置文件中的用户名跟密码即可登录
还没有评论,来说两句吧...