首页>代码>SpringBoot+mybatis+layui搭建网站后台权限管理系统contentManagerSystem2.0>/contentManagerSystem/src/main/java/com/yxb/cms/architect/conf/MyBatisDataSourceConfig.java
/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2017 © yangxiaobing, 873559947@qq.com * * This file is part of contentManagerSystem. * contentManagerSystem is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * contentManagerSystem is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with contentManagerSystem. If not, see <http://www.gnu.org/licenses/>. * * 这个文件是contentManagerSystem的一部分。 * 您可以单独使用或分发这个文件,但请不要移除这个头部声明信息. * contentManagerSystem是一个自由软件,您可以自由分发、修改其中的源代码或者重新发布它, * 新的任何修改后的重新发布版必须同样在遵守GPL3或更后续的版本协议下发布. * 关于GPL协议的细则请参考COPYING文件, * 您可以在contentManagerSystem的相关目录中获得GPL协议的副本, * 如果没有找到,请连接到 http://www.gnu.org/licenses/ 查看。 * * - Author: yangxiaobing * - Contact: 873559947@qq.com * - License: GNU Lesser General Public License (GPL) * - source code availability: http://git.oschina.net/yangxiaobing_175/contentManagerSystem */ package com.yxb.cms.architect.conf; import com.alibaba.druid.pool.DruidDataSource; import com.yxb.cms.architect.properties.AppCommonMyBatisProperties; import com.yxb.cms.architect.properties.JdbcProperties; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.interceptor.TransactionInterceptor; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Properties; /** * SpringBoot MyBatis数据链接配置信息<br> * * 1.注册DataSource Druid数据源<br> * 2.注册数据源事务管理<br> * 3.注册SqlSessionFactory<br> * * @author yangxiaobing * @date 2017/7/14 */ @Configuration @EnableTransactionManagement //扫描 Mapper 接口并容器管理 @MapperScan(basePackages = "com.yxb.cms.dao") public class MyBatisDataSourceConfig { private static Logger log = LogManager.getLogger(MyBatisDataSourceConfig.class); /** * 注册DataSource * @return */ @Bean(destroyMethod = "close", initMethod="init") @Primary public DataSource myBatisDataSource(AppCommonMyBatisProperties appCommonMyBatisProperties,JdbcProperties jdbcProperties) throws SQLException { log.info("------------------myBatis DruiDataSource init ---------"); DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); dataSource.setInitialSize(jdbcProperties.getInitialSize()); //初始化链接大小 dataSource.setMaxActive(jdbcProperties.getMaxActive()); //连接池最大使用链接数量 //dataSource.setMaxIdle(dbProperties.getMaxIdle()); //连接池最大空闲,过时,暂不使用 dataSource.setMinIdle(jdbcProperties.getMinIdle()); //连接池最小空闲 dataSource.setMaxWait(jdbcProperties.getMaxWait()); //获取连接最大等待时间 dataSource.setValidationQuery(jdbcProperties.getValidationQuery()); //验证数据库是否连通 dataSource.setTestOnBorrow(appCommonMyBatisProperties.isTestOnBorrow()); dataSource.setTestOnReturn(appCommonMyBatisProperties.isTestOnReturn()); dataSource.setTestWhileIdle(appCommonMyBatisProperties.isTestWhileIdle()); //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 dataSource.setTimeBetweenEvictionRunsMillis(appCommonMyBatisProperties.getTimeBetweenEvictionRunsMillis()); //配置一个连接在池中最小生存的时间,单位是毫秒 dataSource.setMinEvictableIdleTimeMillis(appCommonMyBatisProperties.getMinEvictableIdleTimeMillis()); //打开removeAbandoned功能 dataSource.setRemoveAbandoned(appCommonMyBatisProperties.isRemoveAbandoned()); // 1800秒,也就是30分 dataSource.setRemoveAbandonedTimeout(appCommonMyBatisProperties.getRemoveAbandonedTimeout()); //关闭abanded连接时输出错误日志 dataSource.setLogAbandoned(appCommonMyBatisProperties.isLogAbandoned()); //监控数据库 dataSource.setFilters(appCommonMyBatisProperties.getFilters()); //开启池的prepared statement 池功能 dataSource.setPoolPreparedStatements(appCommonMyBatisProperties.isPoolPreparedStatements()); return dataSource; } /** * 注册数据源事务管理 * @return * @throws SQLException */ @Bean(name="myBatisTransactionManager") public DataSourceTransactionManager myBatisTransactionManager(DataSource myBatisDataSource) throws SQLException { return new DataSourceTransactionManager(myBatisDataSource); } /** * 声明式事务 * @param platformTransactionManager * @return */ @Bean(name="transactionInterceptor") public TransactionInterceptor transactionInterceptor(PlatformTransactionManager platformTransactionManager){ TransactionInterceptor transactionInterceptor = new TransactionInterceptor(); transactionInterceptor.setTransactionManager(platformTransactionManager); Properties transactionAttributes = new Properties(); transactionAttributes.setProperty("create*","PROPAGATION_REQUIRED,-Throwable"); transactionAttributes.setProperty("insert*","PROPAGATION_REQUIRED,-Throwable"); transactionAttributes.setProperty("save*","PROPAGATION_REQUIRED,-Throwable"); transactionAttributes.setProperty("update*","PROPAGATION_REQUIRED,-Throwable"); transactionAttributes.setProperty("delete*","PROPAGATION_REQUIRED,-Throwable"); transactionAttributes.setProperty("select*","PROPAGATION_REQUIRED,-Throwable,readOnly"); transactionInterceptor.setTransactionAttributes(transactionAttributes); return transactionInterceptor; } @Bean public BeanNameAutoProxyCreator transactionAutoProxy(){ BeanNameAutoProxyCreator transactionAutoProxy = new BeanNameAutoProxyCreator(); transactionAutoProxy.setProxyTargetClass(true); transactionAutoProxy.setBeanNames("*Service"); transactionAutoProxy.setInterceptorNames("transactionInterceptor"); return transactionAutoProxy; } /** * 注册数据源事务管理 * @param myBatisDataSource * @return * @throws Exception */ @Bean public SqlSessionFactory myBatisSqlSessionFactory(DataSource myBatisDataSource,AppCommonMyBatisProperties appCommonMyBatisProperties) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); //添加数据源 sessionFactory.setDataSource(myBatisDataSource); //实体类扫描路径 sessionFactory.setTypeAliasesPackage(appCommonMyBatisProperties.getTypeAliasesPackage()); //Mapper文件位置 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(appCommonMyBatisProperties.getMapperLocation())); //mybatisConfig 文件 sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(appCommonMyBatisProperties.getConfigLocation())); return sessionFactory.getObject(); } }

ma406805131 LV19
2024年12月20日
15578157792 LV7
2024年10月25日
陈小灏 LV18
2024年6月23日
13521878735 LV3
2024年3月26日
black8angel LV4
2023年12月27日
mq13947193109 LV19
2023年8月1日
淡心伤 LV11
2023年8月1日
jlmarket LV22
2023年6月15日
levmar LV12
2023年1月12日
13285515160 LV1
2022年11月21日