美文网首页
Spring boot+Mybatis+druid 实战

Spring boot+Mybatis+druid 实战

作者: Jimhou | 来源:发表于2018-08-29 16:28 被阅读70次

    配置文件application.properties

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.druid.url=jdbc:mysql://x.x.x.x:3306/xxx
    spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.druid.username=xxx
    spring.datasource.druid.password=xxx
    # 初始化大小,最小,最大
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.min-idle=5
    spring.datasource.druid.max-active=20
    # 配置获取连接等待超时的时间
    spring.datasource.druid.max-wait=60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.druid.time-between-eviction-runs-millis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.druid.min-evictable-idle-time-millis=300000
    #检测连接是否有效的sql
    spring.datasource.druid.validation-query=SELECT 'x'
    spring.datasource.druid.test-while-idle=true
    spring.datasource.druid.test-on-borrow=false
    spring.datasource.druid.test-on-return=false
    # PSCache Mysql下建议关闭
    spring.datasource.druid.pool-prepared-statements=false
    spring.datasource.druid.max-pool-prepared-statement-per-connection-size=-1
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    spring.datasource.druid.filters=stat,wall
    # 合并多个DruidDataSource的监控数据
    spring.datasource.druid.use-global-data-source-stat=true
    spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    

    Druid配置Bean

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    @Component
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public class DruidDataSourceProperty {
        private String url;
        private String username;
        private String password;
        private String driverClassName;
        private int initialSize = 0;
        private int minIdle;
        private int maxActive = 8;
        private int maxWait;
        private int timeBetweenEvictionRunsMillis = 1000 * 60;
        private int minEvictableIdleTimeMillis = 1000 * 60 * 30;
        private String validationQuery;
        private boolean testWhileIdle = false;
        private boolean testOnBorrow = true;
        private boolean testOnReturn = false;
        private boolean poolPreparedStatements = false;
        private int maxPoolPreparedStatementPerConnectionSize = -1;
        private String filters;
        private boolean useGlobalDataSourceStat = false;
        private String connectionProperties;
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getDriverClassName() {
            return driverClassName;
        }
    
        public void setDriverClassName(String driverClassName) {
            this.driverClassName = driverClassName;
        }
    
        public int getInitialSize() {
            return initialSize;
        }
    
        public void setInitialSize(int initialSize) {
            this.initialSize = initialSize;
        }
    
        public int getMinIdle() {
            return minIdle;
        }
    
        public void setMinIdle(int minIdle) {
            this.minIdle = minIdle;
        }
    
        public int getMaxActive() {
            return maxActive;
        }
    
        public void setMaxActive(int maxActive) {
            this.maxActive = maxActive;
        }
    
        public int getMaxWait() {
            return maxWait;
        }
    
        public void setMaxWait(int maxWait) {
            this.maxWait = maxWait;
        }
    
        public int getTimeBetweenEvictionRunsMillis() {
            return timeBetweenEvictionRunsMillis;
        }
    
        public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
            this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
        }
    
        public int getMinEvictableIdleTimeMillis() {
            return minEvictableIdleTimeMillis;
        }
    
        public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
            this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
        }
    
        public String getValidationQuery() {
            return validationQuery;
        }
    
        public void setValidationQuery(String validationQuery) {
            this.validationQuery = validationQuery;
        }
    
        public boolean isTestWhileIdle() {
            return testWhileIdle;
        }
    
        public void setTestWhileIdle(boolean testWhileIdle) {
            this.testWhileIdle = testWhileIdle;
        }
    
        public boolean isTestOnBorrow() {
            return testOnBorrow;
        }
    
        public void setTestOnBorrow(boolean testOnBorrow) {
            this.testOnBorrow = testOnBorrow;
        }
    
        public boolean isTestOnReturn() {
            return testOnReturn;
        }
    
        public void setTestOnReturn(boolean testOnReturn) {
            this.testOnReturn = testOnReturn;
        }
    
        public boolean isPoolPreparedStatements() {
            return poolPreparedStatements;
        }
    
        public void setPoolPreparedStatements(boolean poolPreparedStatements) {
            this.poolPreparedStatements = poolPreparedStatements;
        }
    
        public int getMaxPoolPreparedStatementPerConnectionSize() {
            return maxPoolPreparedStatementPerConnectionSize;
        }
    
        public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
            this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
        }
    
        public String getFilters() {
            return filters;
        }
    
        public void setFilters(String filters) {
            this.filters = filters;
        }
    
    
        public boolean isUseGlobalDataSourceStat() {
            return useGlobalDataSourceStat;
        }
    
        public void setUseGlobalDataSourceStat(boolean useGlobalDataSourceStat) {
            this.useGlobalDataSourceStat = useGlobalDataSourceStat;
        }
    
        public String getConnectionProperties() {
            return connectionProperties;
        }
    
        public void setConnectionProperties(String connectionProperties) {
            this.connectionProperties = connectionProperties;
        }
    }
    

    数据库连接配置

    @Configuration
    @EnableTransactionManagement
    @MapperScan("xxx.xxx.xx.mapper")
    @ConditionalOnClass(com.alibaba.druid.pool.DruidDataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)
    
    public class JdbcConfiguration implements TransactionManagementConfigurer {
        @Autowired
        private DruidDataSourceProperty druidDataSourceProperty;
    
    
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @Bean    
        public DataSource dataSource() {
            DruidDataSource datasource = new DruidDataSource();
    
            datasource.setUrl(druidDataSourceProperty.getUrl());
            datasource.setUsername(druidDataSourceProperty.getUsername());
            datasource.setPassword(druidDataSourceProperty.getPassword());
            datasource.setDriverClassName(druidDataSourceProperty.getDriverClassName());
    
            datasource.setInitialSize(druidDataSourceProperty.getInitialSize());
            datasource.setMinIdle(druidDataSourceProperty.getMinIdle());
            datasource.setMaxActive(druidDataSourceProperty.getMaxActive());
        
            datasource.setMaxWait(druidDataSourceProperty.getMaxWait());
          
            datasource.setTimeBetweenEvictionRunsMillis(druidDataSourceProperty.getTimeBetweenEvictionRunsMillis());
    
            datasource.setMinEvictableIdleTimeMillis(druidDataSourceProperty.getMinEvictableIdleTimeMillis());
            datasource.setValidationQuery(druidDataSourceProperty.getValidationQuery());
            datasource.setTestWhileIdle(druidDataSourceProperty.isTestWhileIdle());
            datasource.setTestOnBorrow(druidDataSourceProperty.isTestOnBorrow());
            datasource.setTestOnReturn(druidDataSourceProperty.isTestOnReturn());
            datasource.setPoolPreparedStatements(druidDataSourceProperty.isPoolPreparedStatements());
            datasource.setMaxPoolPreparedStatementPerConnectionSize(druidDataSourceProperty.getMaxPoolPreparedStatementPerConnectionSize());
            datasource.setUseGlobalDataSourceStat(druidDataSourceProperty.isUseGlobalDataSourceStat());
            try {
                datasource.setFilters(druidDataSourceProperty.getFilters());
            } catch (SQLException e) {
                logger.error("druid configuration initialization filter", e);
            }
            datasource.setConnectionProperties(druidDataSourceProperty.getConnectionProperties());
    
            return datasource;
        }
    
    
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            // 添加XML目录
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
           
                bean.setMapperLocations(resolver.getResources("classpath:mybatis/mapper/*/*.xml"));
                SqlSessionFactory sq = bean.getObject();
                return sq;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    
        @Bean(name = "sqlSessionTemplate")
        @Autowired
        public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            SqlSessionTemplate sql = new SqlSessionTemplate(sqlSessionFactory);
            return sql;
        }
    
        @Bean(name = "txManager")
        @Override
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }
    
        @Bean
        public TransactionTemplate transactionTemplate(@Qualifier("txManager") PlatformTransactionManager txManager) {
            return new TransactionTemplate(txManager);
        }
    
    }
    

    druid 监控配置

    @Bean
      public ServletRegistrationBean druidServlet() {
          logger.info("init Druid Servlet Configuration ");
          ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
          servletRegistrationBean.setServlet(new StatViewServlet());
          servletRegistrationBean.addUrlMappings("/druid/*");
          Map<String, String> initParameters = new HashMap<String, String>();
          initParameters.put("loginUsername", "admin");
          initParameters.put("loginPassword", "admin");
          initParameters.put("resetEnable", "false");
          initParameters.put("allow", ""); 
          initParameters.put("deny", "");
          servletRegistrationBean.setInitParameters(initParameters);
          return servletRegistrationBean;
      }
    
      @Bean
      public FilterRegistrationBean filterRegistrationBean() {
          FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
          filterRegistrationBean.setFilter(new WebStatFilter());
          filterRegistrationBean.addUrlPatterns("/*");
          filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
          return filterRegistrationBean;
      }
    

    druid 监控

    image.png

    相关文章

      网友评论

          本文标题:Spring boot+Mybatis+druid 实战

          本文链接:https://www.haomeiwen.com/subject/ydrkwftx.html