以下内容用于记录目的。实现在Springboot中集成Mybatis和Druid。其中使用的为spring-boot-starter-parent如下:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent>

1,引入需要的依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.8</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId>
</dependency>
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.4</version>
</dependency>

2,application.yml中配置数据源信息

spring: datasource: master:driverClassName: oracle.jdbc.OracleDriverurl: jdbc:oracle:thin:@192.168.30.150:1521:orclusername: ioss_sqmpassword: ioss_sqm

3,创建用于封装数据源配置信息的对象DruidPropConfig

public class DruidPropConfig {private String url ;private String driverClassName ;private String username ;
}

4,创建用于判断是否需要创建数据源的Condition对象

public class MasterDataSourceCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata arg1) {if(!context.getEnvironment().containsProperty("spring.datasource.master.url")){return false ;}if(!context.getEnvironment().containsProperty("spring.datasource.master.driverClassName")){return false ;}if(!context.getEnvironment().containsProperty("spring.datasource.master.username")){return false ;}if(!context.getEnvironment().containsProperty("spring.datasource.master.password")){return false ;}String url = context.getEnvironment().getProperty("spring.datasource.master.url") ;String driverClassName = context.getEnvironment().getProperty("spring.datasource.master.driverClassName") ;String username = context.getEnvironment().getProperty("spring.datasource.master.username") ;String password = context.getEnvironment().getProperty("spring.datasource.master.password") ;if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(driverClassName) && StringUtils.isNotBlank(username)&& StringUtils.isNotBlank(password)){return true ;}return false;}
}

5,配置数据源

@Configuration
@EnableTransactionManagement // 启注解事务管理,等同于xml配置方式的 <tx:annotation-driven />
@Conditional(MasterDataSourceCondition.class)
@MapperScan(basePackages = "com.ultrapower.ioss.cmnet.linksync.mapper", sqlSessionTemplateRef="sqlSessionTemplate")
public class MasterDataSourceCfg{private Logger log = LoggerFactory.getLogger(MasterDataSourceCfg.class) ;public PageInterceptor pageHelper() {PageInterceptor pageHelper = new PageInterceptor();Properties properties = new Properties();properties.setProperty("offsetAsPageNum", "true");properties.setProperty("rowBoundsWithCount", "true");properties.setProperty("offsetAsPageNum", "true");properties.setProperty("pageSizeZero", "true");properties.setProperty("reasonable", "true");properties.setProperty("autoRuntimeDialect", "true");// properties.setProperty("params","pageNum=pageNum;pageSize=pageSize");pageHelper.setProperties(properties);return pageHelper;}@Primary@Bean(name = "datasourceConfig")@ConfigurationProperties(prefix="spring.datasource.master")public DruidPropConfig datasourceConfig(){return new DruidPropConfig();}/*** 主数据库数据源* */@Primary@Bean(name = "dataSource")public DataSource dataSource() throws Exception{DruidPropConfig config = datasourceConfig();if(config == null || config.getDriverClassName() == null){throw new Exception("slave datasource 数据源需要配置." + config.toString());}/*DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(config.getDriverClassName());dataSource.setUrl(config.getUrl());dataSource.setUsername(config.getUsername());dataSource.setPassword(config.getPassword());dataSource.setConnectionErrorRetryAttempts(5);return dataSource;*/Map<String, Object> properties = new HashMap<String, Object>();properties.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, config.getDriverClassName());properties.put(DruidDataSourceFactory.PROP_URL, config.getUrl());properties.put(DruidDataSourceFactory.PROP_USERNAME, config.getUsername());properties.put(DruidDataSourceFactory.PROP_PASSWORD, config.getPassword());// 添加统计、SQL注入、日志过滤器properties.put(DruidDataSourceFactory.PROP_FILTERS, "stat,wall,log4j2");// sql合并,慢查询定义为5sproperties.put(DruidDataSourceFactory.PROP_CONNECTIONPROPERTIES, "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000");return DruidDataSourceFactory.createDataSource(properties);}@Primary@Bean(name = "sqlSessionFactory")@ConditionalOnBean(name = "dataSource") // 仅仅在当前上下文中存在某个对象时,才会实例化一个Beanpublic SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();//bean.setObjectWrapperFactory(new MapWrapperFactory());bean.setDataSource(dataSource);// bean.setPlugins(new Interceptor[] {// pageHelper(),sqlPrintInterceptor() });bean.setPlugins(new Interceptor[] { pageHelper() });// 添加XML目录ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();try {List<Resource> resources = new ArrayList<>();resources.addAll(Arrays.asList(resolver.getResources("classpath*:com/ultrapower/ioss/**/mapper/**/*.xml")));resources.addAll(Arrays.asList(resolver.getResources("classpath:mapper/**/*.xml")));bean.setMapperLocations(resources.toArray(new Resource[resources.size()]));// 设置mybatis configuration 扫描路径// bean.setConfigLocation(resolver.getResource("classpath:mybatis-config.xml"));return bean.getObject();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}@Primary@Bean("sqlSessionTemplate")@ConditionalOnBean(name = "sqlSessionFactory")public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}@Primary@ConditionalOnBean(name = "dataSource")@Bean(name = "transactionManager")public PlatformTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);return dataSourceTransactionManager;}
}

6,配置Durid监控

@Configuration
public class DruidConfiguration {@Beanpublic ServletRegistrationBean druidServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new StatViewServlet());servletRegistrationBean.addUrlMappings("/druid/*");// IP白名单//servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");// 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;}@Beanpublic FilterRegistrationBean filterRegistrationBean() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new WebStatFilter());filterRegistrationBean.addUrlPatterns("/*");filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean;}
}

转载于:https://blog.51cto.com/dengshuangfu/2306660

Springboot+Mybatis+Durid相关推荐

  1. Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊,管理员可对宠物 ...

  2. Java项目:实现个人博客系统(java+springboot+mybatis+redis+vue+elementui+Mysql)

    源码获取:博客首页 "资源" 里下载! springboot+mybatis+前端vue,使用前后端分离架构实现的个人博客系统,共7个模块,首页,写博客,博客详情页,评论管理,文章 ...

  3. Java项目:实现权限管理系统(java+SpringBoot+MyBatis+AOP+LayUI+Mysql)

    源码获取:博客首页 "资源" 里下载! springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统. 共五个模块,角色管理,菜单管理,实验室管理,学生管理,管 ...

  4. springboot+mybatis ,出现多于的参数导致查询数据缺少

    在springboot+mybatis 中,经常会有多于的字段遗留在xml文件中,这种情况正常人会以为会判断空和null状态,不影响sql语句,但是实际上会有影响, 因为在parameter中未定义, ...

  5. 一个基于SpringBoot + Mybatis + Vue的代码生成器

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! code-gen 一款代码生成工具,可自定义模板生成不同的 ...

  6. SpringBoot mybatis Interceptor分页实现

    环境准备 什么是拦截器 为什么要这样写 具体实现 什么是拦截器 SpringBoot mybatis interceptor拦截器是你在执行SQL语句之前对执行的SQL语句进行修改 分页的原理是通过拦 ...

  7. SpringBoot+Mybatis配置Druid多数据源

    开篇之前,说一句题外话.多数据源和动态数据源的区别. 多数据源,一般用于对接多个业务上独立的数据库(可能异构数据库). 动态数据源,一般用于大型应用对数据切分. 配置参考 如何配置多数据源,网上教程一 ...

  8. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel

    springboot+mybatis+sqlserver导出数据库数据并实现下载到excel 1.准备工作 1.1 下载一个springboot框架demo 1.2 配置maven 1.3 引入需要的 ...

  9. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描...

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

最新文章

  1. [NOI2010]能量采集
  2. mysql 字符串 空格函数_mysql中的去除空格函数
  3. MyBatis传入多个参数的问题
  4. python---memcache使用操作
  5. 数据结构——字符串(未完)
  6. 【转载】PHP的(EOT)在PHP中添加html
  7. 再次记录 Visual Studio 2015 CTP 5 的一个坑
  8. java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
  9. vue-cli的router/index.js跳转出问题了
  10. PYTHON面向对象编程基础知识
  11. Julia: reduce 、mapreduce、filter
  12. 长安大学微型计算机原理与接口技术答案,长安大学微机原理与接口技术AB卷试题与答案.doc...
  13. 杭州十二条经典登山路线
  14. 选择适合自己的测试广度和深度
  15. 师创作业--Bank Account Management System 银行账户管理系统 简称BAM
  16. html的excel表格自动换行,excel自动换行总结
  17. JavaWeb之【web站点的欢迎页面】
  18. icloud 照片导出_如何将iCloud照片用作Apple TV的屏幕保护程序
  19. 使用AMR9开发板(zedboard)基于opencv读取并处理网络监控相机rtsp视频流
  20. SecureCRT 服务器链接信息密码忘记找回

热门文章

  1. 让机器学习自动帮我们建模,这4个Python库能让你大开眼界
  2. 不会画饼的领导,不值得托付
  3. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%
  4. 深度学习已入末路,谁能引领下一代AI?
  5. 对话科大讯飞刘聪:深度学习在中国是否“过火”?
  6. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解
  7. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解
  8. TransG : A Generative Model for Knowledge Graph Embedding ACL 2016.Berlin, Germany.
  9. 物理史2000年来最精彩的对决!
  10. 五大核心构成的AIoT,正在遭遇三大挑战,两条突破口外还有什么?