<!--整合druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--整合druid-->
这里注意红框中的黄色背景参数,是因为实体类中没有对应的属性进行映射 以防部分参数未生效,所以实体类的属性需要一一对应数据源中的参数
下面是application.yml中的相关配置
spring:
datasource:
#配置druid连接池
druid:
username: root
password: root
url: jdbc:mysql://localhost:3306/MOxor?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
下面是实体类DruidDataSourceProperties
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
@ConfigurationProperties(prefix = "spring.datasource.druid") //扫描配置类的属性前缀
public class DruidDataSourceProperties {
private String username;
private String password;
private String url;
private String driverClassName;
private Integer initialSize;
private Integer maxActive;
private Integer minIdle;
private long maxWait;
private boolean poolPreparedStatements;
private Integer timeBetweenEvictionRunsMillis;
private Integer minEvictableIdleTimeMillis;
private String validationQuery;
private boolean testWhileIdle;
private boolean testOnBorrow;
private boolean testOnReturn;
private String filters;
private Integer maxPoolPreparedStatementPerConnectionSize;
private boolean useGlobalDataSourceStat;
private String connectionProperties;
}
说明:
以下注解是lombok提供简化实体类创建get、set、toString、构造器的方法
@NoArgsConstructor @AllArgsConstructor @Getter @Setter @ToString
下面这个注解的作用是,简化application.yml参数与属性间映射关系,就不用在每个属性上使用@Value注解的形式了
@ConfigurationProperties(prefix = "spring.datasource.druid") //扫描配置类的属性前缀
@Configuration
@EnableConfigurationProperties(value = DruidDataSourceProperties.class)
public class DruidDataSourceConfig {
@Autowired
private DruidDataSourceProperties druidDataSourceProperties;
@Bean
public DataSource dataSource() throws SQLException {
System.out.println(druidDataSourceProperties);
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(druidDataSourceProperties.getUsername());
druidDataSource.setPassword(druidDataSourceProperties.getPassword());
druidDataSource.setUrl(druidDataSourceProperties.getUrl());
druidDataSource.setDriverClassName(druidDataSourceProperties.getDriverClassName());
druidDataSource.setInitialSize(druidDataSourceProperties.getInitialSize());
druidDataSource.setMinIdle(druidDataSourceProperties.getMinIdle());
druidDataSource.setFilters(druidDataSourceProperties.getFilters());
druidDataSource.setMaxActive(druidDataSourceProperties.getMaxActive());
druidDataSource.setMaxWait(druidDataSourceProperties.getMaxWait());
druidDataSource.setPoolPreparedStatements(druidDataSourceProperties.isPoolPreparedStatements());
return druidDataSource;
}
/**
* 配置druid管理后台的servlet * @return
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String, Object> initParameters = new HashMap<>();
initParameters.put("loginUsername", "admin");
initParameters.put("loginPassword", "123456");
bean.setInitParameters(initParameters);
return bean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
Map<String, Object> initParams = new HashMap<>();
initParams.put("exclusions", "*.js,*.css,/druid/*");
filterRegistrationBean.setInitParameters(initParams);
return filterRegistrationBean;
}
}
注意:
statViewServlet()与filterRegistrationBean()并非必须配置的方法
但这里十分推荐加上,因为配置后才能使用Druid的后台监控界面
但注意在application.yml中必须有filters: stat参数,且保证实体类中能正确映射,最后dataSource()中包含druidDataSource.setFilters
@RestController
public class DruidTestController {
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping("/testJdbc")
public List<Map<String, Object>> testJdbcTemplate() {
List<Map<String, Object>> testList = jdbcTemplate.queryForList("select * from test");
return testList;
}
}
请求路径:http://localhost:8081/testJdbc 笔者这里使用的Chrome,结合FeHelper插件美化JSON格式数据,结果为:
通过路径:http://localhost:8081/druid 来看看druid的监控界面,账号密码为: statViewServlet()中的loginUsername和loginPassword
进入界面选择“SQL监控”就可以监控刚才执行的SQL啦!
若有不足,敬请指正 虚心若愚,求知若渴