首页>代码>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;
}
}
最近下载更多
sunlea LV20
10月24日
dane168 LV10
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日
最近浏览更多
khmumuno
10月24日
暂无贡献等级
sunlea LV20
10月24日
dazi001
8月10日
暂无贡献等级
微信网友_7513956916826112 LV3
5月17日
2022102154 LV1
3月27日
dane168 LV10
2月17日
ruozizz LV3
1月9日
486100086
2024年12月22日
暂无贡献等级
微信网友_6786215447367680 LV5
2024年10月8日
微信网友_7134912998903808 LV15
2024年9月2日

