springboot(五、多源数据库【静态】)

  • Post author:
  • Post category:其他


有时候项目需要访问多个数据库,就需要搭建多源数据库,这里先搭建静态的,就是一个数据库,一个dao层,一个DataSource 一个sqlsessionfactory

1、主要的架构呈现下面这样,一个数据库一个dao层,同时一个mapper   另外 我单独写出 com.example.exam1包下面的东西


2、application.properties


3、DataSource(三个DataSource)

@Configuration
public class DataSourceConf {
    @Autowired
    Environment env;

    @Bean(name = "ds1")
    public DataSource dataSource1() {
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setUrl(env.getProperty("spring.write.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.write.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.write.datasource.password"));
        dataSource.setDriverClassName(env.getProperty("spring.write.datasource.driverClassName"));
        return dataSource;
    }

    @Bean(name = "ds2")
    public DataSource dataSource2() {
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setUrl(env.getProperty("spring.read.one.url"));
        dataSource.setUsername(env.getProperty("spring.read.one.username"));
        dataSource.setPassword(env.getProperty("spring.read.one.password"));
        dataSource.setDriverClassName(env.getProperty("spring.read.one.driverClassName"));
        return dataSource;
    }
    @Bean(name = "ds3")
    public DataSource dataSource3() {
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setUrl(env.getProperty("spring.read.two.url"));
        dataSource.setUsername(env.getProperty("spring.read.two.username"));
        dataSource.setPassword(env.getProperty("spring.read.two.password"));
        dataSource.setDriverClassName(env.getProperty("spring.read.two.driverClassName"));
        return dataSource;
    }
}

4、sqlsessionfaxctory 这是其中一个主数据源的sqlsessionfactory  其他的这样配置

@Configuration
@MapperScan(basePackages="com.example.dao.mapper1",sqlSessionFactoryRef="sqlSessionFactory1")
public class MybatisDB1Conf {
	   @Qualifier("ds1")
	    @Autowired
	    DataSource dataSource;

	    @Bean(name = "sqlSessionFactory1")
	    @Primary
	    public SqlSessionFactory sqlSessionFactory1() throws Exception {
	        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
	        factoryBean.setDataSource(dataSource);
	        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
	        factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/mapper1/*.xml"));
	        factoryBean.setTypeAliasesPackage("com.example.entity");
	        return factoryBean.getObject();

	    }

	    @Bean
	    public SqlSessionTemplate sqlSessionTemplate1() throws Exception {
	        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory1()); // 使用上面配置的Factory
	        return template;
	    }
}

5、dao层(这是第一个数据库的写法,第二三个数据库也这样写)

@Mapper
public interface Dao1 {
	
	List<entity> db1();
	
}

6、mapper.xml(也一样分开,对应各个dao层)

7、service层用一个,进行调用各个dao层,同时写逻辑层

8、

serviceImpl层加上注解

@Service

9、controller

写写调用service层之类的

10、Application  入口类

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class
})
public class DataSourcesProjectApplication {
	public static void main(String[] args) {
		SpringApplication.run(DataSourcesProjectApplication.class, args);
	}
}



版权声明:本文为mn_is_me原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。