springboot結合druid (二)
阿新 • • 發佈:2018-12-10
在application.yml中,我們新增DataSource的配置,如下:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/xxxxxxxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true username: xxxxxx password: xxxxxx #-------------------------- # 下面為連線池的補充設定,應用到上面所有資料來源中 # 初始化大小,最小,最大 tomcat: initial-size: 5 minIdle: 1 max-active: 50 # 配置獲取連線等待超時的時間 max-wait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 time-between-eviction-runs-millis: 60000 # 配置一個連線在池中最小生存的時間,單位是毫秒 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 dbcp2: # 開啟PSCache,並且指定每個連線上PSCache的大小 pool-prepared-statements: false #spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 filters: stat,wall,log4j # 合併多個DruidDataSource的監控資料 #spring.datasource.useGlobalDataSourceStat=true
建立一個子模組ssm.core,放一些公共的東西,然後在下面新建一個config包,新建DruidConfig.java:
@Configuration public class DruidConfig { @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${spring.datasource.tomcat.initial-size}") private int initialSize; @Value("${spring.datasource.tomcat.minIdle}") private int minIdle; @Value("${spring.datasource.tomcat.max-active}") private int maxActive; @Value("${spring.datasource.tomcat.max-wait}") private int maxWait; @Value("${spring.datasource.tomcat.time-between-eviction-runs-millis}") private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.tomcat.min-evictable-idle-time-millis}") private int minEvictableIdleTimeMillis; @Value("${spring.datasource.tomcat.validation-query}") private String validationQuery; @Value("${spring.datasource.tomcat.test-while-idle}") private boolean testWhileIdle; @Value("${spring.datasource.tomcat.test-on-borrow}") private boolean testOnBorrow; @Value("${spring.datasource.tomcat.test-on-return}") private boolean testOnReturn; @Value("${spring.datasource.dbcp2.pool-prepared-statements}") private boolean poolPreparedStatements; // @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}") // private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}") private String filters; @Value("{spring.datasource.tomcat.connection-properties}") private String connectionProperties; @Bean @Primary public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); 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) { } datasource.setConnectionProperties(connectionProperties); return datasource; } /** * 註冊一個StatViewServlet * @return */ @Bean public ServletRegistrationBean druidStatViewServlet(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供類的進行註冊. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //新增初始化引數:initParams //白名單: servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny","192.168.1.73"); //登入檢視資訊的賬號密碼. servletRegistrationBean.addInitParameter("loginUsername","admin"); servletRegistrationBean.addInitParameter("loginPassword","123456"); //是否能夠重置資料. servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } @Bean public StatFilter statFilter() { StatFilter statFilter = new StatFilter(); statFilter.setLogSlowSql(true); statFilter.setMergeSql(true); statFilter.setSlowSqlMillis(1000); return statFilter; } @Bean public WallFilter wallFilter() { WallFilter wallFilter = new WallFilter(); // 允許執行多條SQL WallConfig config = new WallConfig(); config.setMultiStatementAllow(true); wallFilter.setConfig(config); return wallFilter; } }
同樣,我們在ssm.center中新增ssm.core的依賴,並且在Application.java啟動類上新增@Import(DruidConfig.class)的註解,接著,我們為了測試,在TestController中新增如下內容:
@Autowired private JdbcTemplate jdbcTemplate; @RequestMapping("hello") public List<Map<String, Object>> hello() { List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT user_name,password FROM et_user ", new Object[]{}); return list; }
最後,我們執行程式,開啟新頁面http://localhost:8080/druid 登入賬號密碼,為我們在DruidConfig中設定的賬號密碼,選中SQL監控,然後執行http://localhost:8080/hello,我們會發現在SQL監控中會出現我們執行一次sql的記錄,這樣就配置成功了