8.spring_boot druid

八、spring_boot 整合 druid

  1. 在pom.xml文件加入

    <!-- druid 连接池 -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid</artifactId>
    	<version>1.0.18</version>
    </dependency>	
    
  2. 新增druid.properties配置文件

    spring.datasource.druid.initialSize=5
    spring.datasource.druid.minIdle=5
    spring.datasource.druid.maxActive=20
    spring.datasource.druid.maxWait=60000
    spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
    spring.datasource.druid.minEvictableIdleTimeMillis=300000
    spring.datasource.druid.validationQuery=select 1 
    spring.datasource.druid.testWhileIdle=true
    spring.datasource.druid.testOnBorrow=false
    spring.datasource.druid.testOnReturn=false
    spring.datasource.druid.filters=stat,wall,log4j 
    spring.datasource.druid.logSlowSql=true
    
  3. 添加druid配置类

    
    /**
     * 数据库连接池配置
     *
     * @author chair
     */
    @Configuration
    @MapperScan("com.jkoss.examination.*.mapper")
    public class MybatisConfig {
    
    	private Logger logger = LoggerFactory.getLogger(MybatisConfig.class);
    
    	@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.druid.initialSize}")
    	private int initialSize;
    
    	@Value("${spring.datasource.druid.minIdle}")
    	private int minIdle;
    
    	@Value("${spring.datasource.druid.maxActive}")
    	private int maxActive;
    
    	@Value("${spring.datasource.druid.maxWait}")
    	private int maxWait;
    
    	@Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
    	private int timeBetweenEvictionRunsMillis;
    
    	@Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
    	private int minEvictableIdleTimeMillis;
    
    	@Value("${spring.datasource.druid.validationQuery}")
    	private String validationQuery;
    
    	@Value("${spring.datasource.druid.testWhileIdle}")
    	private boolean testWhileIdle;
    
    	@Value("${spring.datasource.druid.testOnBorrow}")
    	private boolean testOnBorrow;
    
    	@Value("${spring.datasource.druid.testOnReturn}")
    	private boolean testOnReturn;
    
    	@Value("${spring.datasource.druid.filters}")
    	private String filters;
    
    	@Value("${spring.datasource.druid.logSlowSql}")
    	private String logSlowSql;
    
    	/**
    	 * 数据库连接池
    	 *
    	 * @return
    	 */
    	@Bean("druidDataSource")
    	public DataSource druidDataSource() {
    		DruidDataSource datasource = new DruidDataSource();
    		datasource.setUrl(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);
    		try {
    			datasource.setFilters(filters);
    		} catch (SQLException e) {
    			logger.error("druid configuration initialization filter", e);
    		}
    		return datasource;
    	}
     
    }
    
  4. 添加druid监控

    /**
     * 访问druid监控信息servlet
     * 
     * @return
     */
    @Bean
    public ServletRegistrationBean druidServletRegistration() {
    	ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    	// 添加初始化参数:initParams
    
    	// 白名单:
    	registration.addInitParameter("allow", "127.0.0.1");
    	// IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not
    	// permitted to view this page.
    	registration.addInitParameter("deny", "");
    	// 登录查看信息的账号密码.
    	registration.addInitParameter("loginUsername", "admin");
    	registration.addInitParameter("loginPassword", "admin");
    	// 是否能够重置数据.
    	registration.addInitParameter("resetEnable", "false");
    	return registration;
    }
    
    /**
     * 过滤druid
     * 
     * @return
     */
    @Bean
    public FilterRegistrationBean druidStatFilter() {
    	FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    
    	// 添加过滤规则.
    	filterRegistrationBean.addUrlPatterns("/*");
    
    	// 添加不需要忽略的格式信息.
    	filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    	return filterRegistrationBean;
    }
    
  5. 如果需要添加事务新增事务配置文件

    /**
     * 事务拦截器
     *
     * @author chair
     */
    @Configuration
    public class TransactionAopConfig {
    
        /**
         * 事务拦截器
         */
        @Bean("txInterceptor")
        TransactionInterceptor getTransactionInterceptor(PlatformTransactionManager tx) {
            return new TransactionInterceptor(tx, transactionAttributeSource());
        }
    
        /**
         * 切面拦截规则 参数会自动从容器中注入
         */
        @Bean
        public AspectJExpressionPointcutAdvisor pointcutAdvisor(TransactionInterceptor txInterceptor) {
            AspectJExpressionPointcutAdvisor pointcutAdvisor = new AspectJExpressionPointcutAdvisor();
            pointcutAdvisor.setAdvice(txInterceptor);
            pointcutAdvisor.setExpression("execution (* com.jkoss.wine.*.service.*.*(..))");
            return pointcutAdvisor;
        }
    
        /**
         * 事务拦截类型
         */
        @Bean("txSource")
        public TransactionAttributeSource transactionAttributeSource() {
            NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
            /* 只读事务,不做更新操作 */
            RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();
            readOnlyTx.setReadOnly(true);
            readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
            /* 当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务 */
            RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute();
            requiredTx.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
            requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // requiredTx.setTimeout(5);
            Map<String, TransactionAttribute> txMap = new HashMap<>();
            txMap.put("insert*", requiredTx);
            txMap.put("update*", requiredTx);
            txMap.put("delete*", requiredTx);
            txMap.put("batch*", requiredTx);
            txMap.put("select*", readOnlyTx);
            source.set	NameMap(txMap);
            return source;
        }
    
    }
    

猜你喜欢

转载自blog.csdn.net/weixin_43285931/article/details/103409580