博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot集成mybatis(druid线程池)
阅读量:6307 次
发布时间:2019-06-22

本文共 4415 字,大约阅读时间需要 14 分钟。

hot3.png

###我的github代码示例 ###Druid是什么?有什么作用? Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。 ###Druid支持哪些数据库? Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。 ###为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的? 阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。 ###配置源码 ###1、监控ServletRegistrationBean

@Slf4j@Configurationpublic class DruidAdminConfiguration {    @Bean    public ServletRegistrationBean druidServlet() {        ServletRegistrationBean reg = new ServletRegistrationBean();        reg.setServlet(new StatViewServlet());        reg.addUrlMappings("/druid/*");        //reg.addInitParameter("allow", "127.0.0.1");        //reg.addInitParameter("deny","");        reg.addInitParameter("loginUsername", "paicheya");        reg.addInitParameter("loginPassword", "PaiCheYaDev");        return reg;    }    @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;    }}

###2、DruidDataSource bean

@Slf4j@Configurationpublic class DruidDatabaseConfiguration {   @Autowired   private Environment environment;   @Bean   public DruidDataSource dataSource() throws PropertyVetoException {       String url = environment.getProperty("spring.datasource.url");       String username = environment.getProperty("spring.datasource.username");       String password = environment.getProperty("spring.datasource.password");       String driverClassName = environment.getProperty("spring.datasource.driver-class-name");       if (url == null || "".equals(url)) {           return null;       }       DruidDataSource druidDataSource = new DruidDataSource();       druidDataSource.setDriverClassName(driverClassName);       druidDataSource.setUrl(url);       druidDataSource.setUsername(username);       druidDataSource.setPassword(password);       druidDataSource.setMaxActive(30);       druidDataSource.setMinIdle(5);       druidDataSource.setInitialSize(5);       druidDataSource.setTestWhileIdle(true);       druidDataSource.setTestOnBorrow(true);       druidDataSource.setValidationQuery("select 1");       druidDataSource.setValidationQueryTimeout(3600);       try {           // druidDataSource.setFilters("stat, wall");           druidDataSource.setFilters("stat");       } catch (SQLException e) {           log.warn("设置Druid的Filters错误。", e);       }       return druidDataSource;   }}

###3、mybatis 配置类

@Configuration@ConditionalOnExpression("'${fortress.mybatis.enabled}'=='true'")public class MyBatisDataSourceConfig { @Autowired private DataSource dataSource; @Bean public DataSourceTransactionManager transactionManager() {     return new DataSourceTransactionManager(dataSource); } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {     final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();     PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();     sessionFactory.setDataSource(dataSource);     sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));     PageHelper pageHelper = new PageHelper();     Properties properties = new Properties();     properties.setProperty("reasonable", "true");     properties.setProperty("supportMethodsArguments", "true");     properties.setProperty("returnPageInfo", "check");     properties.setProperty("params", "count=countSql");     pageHelper.setProperties(properties);     sessionFactory.setPlugins(new Interceptor[]{pageHelper});     return sessionFactory.getObject(); }}

####(1)@ConditionalOnExpression("'${fortress.mybatis.enabled}'=='true'"),此配置为动态加载配置。配置文件中配置true则加载该配置 ####(2)sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));,此配置为为加载xml文件。 ###4、加载原理 MyBatisDataSourceConfig 中加载sqlSessionFactory的参数DataSource 来自spring默认配置。如果在代码中重写 dataSourceBean则加载传入重写的source。如DruidDatabaseConfiguration的dataSourceBean方法。

###4、附赠xml配置方式,加上sql动态监控方式 引用他人博客:

转载于:https://my.oschina.net/jiahaov/blog/968568

你可能感兴趣的文章
Oracle原厂老兵:从负面案例看Hint的最佳使用方式
查看>>
把自己Github上的代码添加Cocoapods支持
查看>>
C语言OJ项目参考(2493)四则运算
查看>>
零基础入门深度学习(二):神经网络和反向传播算法
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
WKWebView代理方法解析
查看>>
IOS定位服务的应用
查看>>
[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签[附源码]
查看>>
IOS中图片(UIImage)拉伸技巧
查看>>
【工具】系统性能查看工具 dstat
查看>>
基于zepto或jquery的手机端弹出框成功,失败,加载特效
查看>>
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
基于上下文无关文法的句子生成算法
查看>>
回顾两年前整理的前端规范
查看>>
你可能不知道的 css tricks
查看>>
服务网格内部的 VirtualService 和 DestinationRule 配置深度解析
查看>>
SFB 项目经验-33-分配公网证书 For 负载均衡-Keepalived-Haproxy
查看>>
jquery mobile左右滑动切换页面
查看>>