這篇文章將為大家詳細講解有關如何實現在Springboot中集成Mybatis和Druid,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
實現在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.OracleDriver url: jdbc:oracle:thin:@192.168.30.150:1521:orcl username: ioss_sqm password: ioss_sqm
3,創建用于封裝數據源配置信息的對象DruidPropConfig
public class DruidPropConfig { private String url ; private String driverClassName ; private String username ; }
4,創建用于判斷是否需要創建數據源的Condition對象
public class MasterDataSourceCondition implements Condition { @Override public 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合并,慢查詢定義為5s properties.put(DruidDataSourceFactory.PROP_CONNECTIONPROPERTIES, "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000"); return DruidDataSourceFactory.createDataSource(properties); } @Primary @Bean(name = "sqlSessionFactory") @ConditionalOnBean(name = "dataSource") // 僅僅在當前上下文中存在某個對象時,才會實例化一個Bean public 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 { @Bean public 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; } @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; } }
關于“如何實現在Springboot中集成Mybatis和Druid”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。