首页>代码>spring boot+mybatis开发java web网页版电子商城网站(适合spring boot初学者学习)>/springBoot-Jsp/src/main/java/com/chen/config/DataSourceConfig.java
package com.chen.config; import java.util.Properties; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; 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 com.alibaba.druid.pool.DruidDataSource; /** ************************************************************ * @类名 : DataSourceConfig.java * * @DESCRIPTION :数据源相关配置 * @AUTHOR : cgj * @DATE : 2017年10月28日 ************************************************************ */ @Configuration @EnableTransactionManagement @MapperScan(basePackages = { "com.chen.mapper" }, sqlSessionFactoryRef = "sqlSessionFactory") public class DataSourceConfig { /** * 配置数据源 * 给其中一个数据源加上@Primary。因为在Spring Boot Jdbc的自动配置过程中,会对于开发者透明地使用dataSource进行一些相关配置,所以当有两个Datasource实现类时,Spring Boot将无法确定使用哪一个。 当我们不为@Bean指定名字时,Spring会默认使用方法名作为Bean的名字,所以下面两个数据源的名字分别为prodDataSource和devDataSource。 * @return */ @Bean(name = "datasource") //配置文件里的属性名是不需要写成spring.datasource.xxx的形式的,写成a.b.c.url也没有问题,只要在配置bean时指定前缀为a.b.c @ConfigurationProperties(prefix = "spring.datasource.dev") @Primary public DataSource testDataSource() { return new DruidDataSource(); } @Bean(name = "sqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("datasource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); System.out.println("数据库配置:"+dataSource); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:sql/*.xml")); // 开启驼峰命名转换 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase(true); bean.setConfiguration(configuration); return bean.getObject(); } /** * 配置事务管理器 * @param prodDataSource * @return */ @Bean(name = "transactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("datasource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 配置JdbcTemplate * 在此我们返回的不是JdbcTemplate的实现,而是其实现接口JdbcOperations。 使用@Qualifier注解指定该注入哪个bean,默认名字为定义该bean的方法名。 * @param prodDataSource * @return */ @Bean(name = "sqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } @Bean(name = "txAdvice") @Primary public TransactionInterceptor transactionInterceptor(PlatformTransactionManager transactionManager) { final String PROPAGATION_REQUIRED = "PROPAGATION_REQUIRED,-Exception"; TransactionInterceptor interceptor = new TransactionInterceptor(); interceptor.setTransactionManager(transactionManager); Properties transactionAttributes = new Properties(); // TransactionDefinition.PROPAGATION_REQUIRED; transactionAttributes.setProperty("insert*", PROPAGATION_REQUIRED); transactionAttributes.setProperty("update*", PROPAGATION_REQUIRED); transactionAttributes.setProperty("delete*", PROPAGATION_REQUIRED); transactionAttributes.setProperty("select*", PROPAGATION_REQUIRED + ",readOnly"); interceptor.setTransactionAttributes(transactionAttributes); return interceptor; } @Bean @Primary public BeanNameAutoProxyCreator transactionAutoProxy() { BeanNameAutoProxyCreator bapc = new BeanNameAutoProxyCreator(); bapc.setExposeProxy(true); bapc.setBeanNames("*ServiceImpl"); bapc.setInterceptorNames("txAdvice"); return bapc; } }

dane168 LV8
2月18日
微信网友_7134912998903808 LV15
2024年9月2日
zolscy LV24
2024年3月24日
微信网友_6699076084797440 LV7
2023年11月2日
dapeng0011 LV15
2023年6月19日
xiechuang666 LV2
2023年6月14日
2499317615 LV3
2023年4月27日
微信网友_6448703090905088 LV2
2023年4月26日
524109 LV5
2023年4月13日
计算机暴龙战士 LV19
2023年4月2日

2022102154 LV1
3月27日
dane168 LV8
2月17日
ruozizz LV3
1月9日
486100086
2024年12月22日
暂无贡献等级
微信网友_6786215447367680 LV5
2024年10月8日
微信网友_7134912998903808 LV15
2024年9月2日
1260669501 LV1
2024年8月31日
zz123456ZWJ
2024年7月12日
暂无贡献等级
gfznnbsafz LV1
2024年6月29日
彗星来的那一夜
2024年6月24日
暂无贡献等级