Spring Cloud项目中单数据源改为多数据源

应项目的需求,要把项目改成多数据源,将两张表单独抽取出来,放入另一个数据库中,由于spring cloud 架构不熟悉,也是花了点时间才做好。

1、禁用srping boot自动配置的单数据源,
启动类上加上注解@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)

@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableFeignClients
public class UserServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServerApplication.class, args);
    }
}

2、修改配置文件,项目中用spring cloud config统一管理配置文件的
在datasource节点下再加一个新数据源配置,如下所示

datasource:
  user-server:
    url: jdbc:mysql://***?characterEncoding=utf-8&autoReconnect=true&f***
    username: ***
    password: ***
    driver-class-name: com.mysql.jdbc.Driver
    max-idle: 10
    max-wait: 10000
    min-idle: 5
    initial-size: 5
    validation-query: SELECT 1
    test-on-borrow: false
    test-while-idle: true
    time-between-eviction-runs-millis: 18800
  user-server-separate:
    url: jdbc:mysql://***?characterEncoding=utf-8&autoReconnect=true****
    username: ***
    password: ***
    driver-class-name: com.mysql.jdbc.Driver
    max-idle: 10
    max-wait: 10000
    min-idle: 5
    initial-size: 5
    validation-query: SELECT 1
    test-on-borrow: false
    test-while-idle: true
    time-between-eviction-runs-millis: 18800

3、分包  两个数据库对应两个实体类的包,xml文件也一样,分两个文件夹,如下图所示
这里写图片描述
domain 和 domain_separate 存放不同库的实体类
这里写图片描述
mybatis和separate存放不同库对应的xml文件

4、创建新的数据源
这里写图片描述
UcSeparateDataSourceConfig这是新配置的数据源,具体内容如下

@Configuration
@MapperScan(basePackages = {"com.baojun.user_server.application.domain_separate"}, sqlSessionFactoryRef = "ucSeparateSqlSessionFactory")
public class UcSeparateDataSourceConfig {
    @Primary
    @Bean(name = "ucSeparateDataSource")
    @ConfigurationProperties(prefix = "datasource.user-server-separate")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "ucSeparateTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("ucSeparateDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "ucSeparateSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("ucSeparateDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:separate/*.xml"));
        return factoryBean.getObject();
    }

    @Bean(name = "ucSeparateSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("ucSeparateSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

这里要注意包路径和xml文件的路径,
@ConfigurationProperties(prefix = “datasource.user-server-separate”)前缀与配置文件中一致

5、在需要更改数据源的地方,加入对应的注解
@Resource(name=”ucSeparateSqlSessionTemplate”)这个就是新配置的数据源

@Repository
public class CarDaoImpl extends BaseDaoImpl<Car> implements CarDao {
    public CarDaoImpl() {
    super(Car.class);
    }
    @Resource(name="ucSeparateSqlSessionTemplate")
    public void sqlSessionTemplate(SqlSessionTemplate sessionTemplate) {
    setSqlSessionTemplate(sessionTemplate);
    }
}

http://blog.csdn.net/neosmith/article/details/61202084,这是本人参考的网上例子

猜你喜欢

转载自blog.csdn.net/every__day/article/details/78721856
今日推荐