首先配置数据库
spring:
datasource:
primary:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://****
username: ****
password: ****
secondary:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://****
username: ****
password: ****
其次是数据库config,因为项目中用到了jpa所以datasource单独拿出来
@Configuration
public class DataSourceConfig {
@Primary//设置主数据库
@Bean("primaryDB")
@Qualifier("primaryDB")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDS() {
return DataSourceBuilder.create().build();
}
@Bean("secondaryDB")
@Qualifier("secondaryDB")
@ConfigurationProperties(prefix = "spring.datasource.crescent")
public DataSource secondDS() {
return DataSourceBuilder.create().build();
}
}
然后是mybatis的配置
package com.zero.common.base.config;
import com.github.pagehelper.PageInterceptor;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
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.core.io.support.ResourcePatternResolver;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef =
"primaryTransactionManager", basePackages = {"com.zero.project.dal.primary.dao"})
@MapperScan(basePackages = {"com.zero.project.dal.primary.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryRepositoryConfig {
@Autowired
private JpaProperties jpaProperties;
@Autowired
@Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Bean(name = "primaryEntityManager")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Bean(name = "primaryEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) {
return builder.dataSource(primaryDataSource).properties(getVendorProperties(primaryDataSource))
.packages("com.zero.project.dal.primary.entity")
.persistenceUnit("persistenceUnit").build();
}
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
/**
* 事务注解
*/
@Primary
@Bean(name = "primaryTransactionManager")
PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
@Primary
@Bean("primarySqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
//驼峰自动转换
configuration.setMapUnderscoreToCamelCase(true);
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(primaryDataSource);
bean.setConfiguration(configuration);
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);
Interceptor[] interceptors = {pageInterceptor};
bean.setPlugins(interceptors);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath*:mybatis/primary/**/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
secondary数据库配置和主数据库一样只要把@primary注解去掉相应的bean名称修改就行
网友评论