springboot环境搭建
git地址:https://github.com/wangruyu1/springboot_demo.git 下的springboot_jpa_druid。
在resources下创建application.yaml,application-dev.yaml,config/application-datasource-dev.yaml(config下的文件能被指定加载,加载顺序看日志.).
application.yaml:
// 激活dev文件
spring:
profiles:
active: dev
application-dev.yaml:
// 激活config目录下的文件,分别是数据源配置,jpa配置,tomcat配置.
spring:
profiles:
include:
- datasource-dev
- jpa
- tomcat
application-datasource-dev.yaml:
// 数据源配置
#配置详解https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8
#密码加密https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
spring:
datasource:
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&useSSL=true
username: root
#加密的密码,原始值是空串""
password: YdwoSUF2sC3V18JArpFojeLHzKO7WIZePmPI5KpvWcz37VtgqSnTzWldcjQ8UdLXAJr/d5Q6UVCSKy5KGoF5WQ==
driverClassName: com.mysql.jdbc.Driver
#密码公钥
public.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKuMFryYhnHAuA5p1TgEIOT9q3jTKCM5B2/ydvyAzRS+0YYruKRG6/HUPhDopmqrYqEi74kFO8kMThb7fG6mAb8CAwEAAQ==
#stat=StatFilter,用于sql监控,wall=WallFilter,防止sql注入,config用于密码加密
filters: stat,wall,slf4j,config
#配置初始化大小、最小、最大
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
maxPoolPreparedStatementPerConnectionSize: 20
#合并sql;慢sql为时间超过5000ms;指定密码解密;密码公钥
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${spring.datasource.public.key}
JPA配置
jpa也就是数据库访问层。需要配置数据源,表与实体的映射关系。
MyDataSource.java:
// 注解配置
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
// 代理方式
@EnableTransactionManagement(proxyTargetClass = true)
// 数据库访问的类所在的包
@EnableJpaRepositories(basePackages = { "com.springboot.druid.demo.repository" })
// 实体类所在的包
@EntityScan(basePackages = { "com.springboot.druid.demo.bean" })
public class MyDataSource {
@Bean
@Primary
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
return new PersistenceExceptionTranslationPostProcessor();
}
@Primary
@Bean(name = "springPoiDataSource")
@ConfigurationProperties("spring.datasource") // 该注解可以自动注入对象的属性(对应配置文件spring.datasource下的属性)
public DruidDataSource newsPoiDataSource() {
return new DruidDataSource();
}
}
druid相关配置
数据源配置
详细信息见上面的数据源配置文件。
数据源web界面配置
主要是sql监控,可以查出sql执行较慢的语句.
DruidConfiguration.java
// web界面配置
@Configuration
public class DruidConfiguration {
private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
@Bean
@SuppressWarnings({ "rawtypes", "unchecked" })
public ServletRegistrationBean druidServlet() {
logger.info("init Druid Servlet Configuration ");
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "");
// 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;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
web监控界面图片
启动程序,浏览器访问http://localhost:port/druid即可.
可以看见其实druid还能监控很多信息,请求URI等等。所以说druid真的很强大。。。