springboot mutil-datasource(多数据源)

这个也算springboot高级阶段了.自己找到的资料 整理下 

1.工程结构

 2.pom.xml

       <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.2.0</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.17</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

3.application.properties

## master 数据源配置
master.datasource.url=jdbc:mysql://localhost:3306/springbootdb_cluster?useUnicode=true&characterEncoding=utf8
master.datasource.username=root
master.datasource.password=root
master.datasource.driverClassName=com.mysql.jdbc.Driver

## cluster 数据源配置
cluster.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8
cluster.datasource.username=root
cluster.datasource.password=root
cluster.datasource.driverClassName=com.mysql.jdbc.Driver

 4.UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mutildatasource.dao.master.UserDao">
    <resultMap id="BaseResultMap" type="com.example.mutildatasource.domian.User">
        <result column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="description" property="description" />
    </resultMap>

    <sql id="Base_Column_List">
		id, user_name, description
	</sql>

    <select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List" />
        from user
        where id = 1
    </select>

</mapper>

5.CityMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mutildatasource.dao.cluster.CityDao">
    <resultMap id="BaseResultMap" type="com.example.mutildatasource.domian.City">
        <result column="id" property="id" />
        <result column="province_id" property="provinceId" />
        <result column="city_name" property="cityName" />
        <result column="description" property="description" />
    </resultMap>

    <sql id="Base_Column_List">
		id, province_id, city_name, description
	</sql>

    <select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List" />
        from city
        where city_name = #{cityName}
    </select>

</mapper>

6.UserService.java

public interface UserService {

    User findByName(String userName);
}

7.UserServiceImpl

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private CityDao cityDao;

    @Autowired
    private UserDao userDao;


    @Override
    public User findByName(String userName) {

        User user = userDao.findByName(userName);
        City city = cityDao.findByName("温岭市");
        user.setCity(city);

        return user;
    }
}

8.City

@Data
@NoArgsConstructor
@AllArgsConstructor
public class City {

    private Long id;

    private Long provinceId;

    private String cityName;

    private String description;


}

9.User

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;

    private String userName;

    private String description;

    private City city;
}

10.UserDao

@Mapper
public interface UserDao {
    User findByName(@Param("cityName") String  cityName);

}

11.CityDao

@Mapper
public interface CityDao {
    City findByName(@Param("cityName") String cityName );
}

12.UserRestController

@RestController
public class UserRestController {

    @Autowired
    private UserService service;

    @RequestMapping(value = "/api/user",method = RequestMethod.GET)
    public User findByName(@RequestParam(value = "userName",required = true) String userName){
        return service.findByName(userName);
    }
}

13.ClusterDataSourceConfig

@Configuration
@MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE,sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterDataSourceConfig {

    //精确到 cluster 目录  隔离其他数据源
    static final String  PACKAGE="com.example.mutildatasource.dao.cluster";
    static final String  MAPPER_LOCATION="classpath:mapper/cluster/*.xml";

    @Value("${cluster.datasource.url}")
    private String url;

    @Value("${cluster.datasource.username}")
    private String user;

    @Value("${cluster.datasource.password}")
    private String password;

    @Value("${cluster.datasource.driverClassName}")
    private String dirverClass;


   @Bean(name = "clusterDataSource")
    public DataSource clusterDataSource(){
       DruidDataSource dataSource = new DruidDataSource();
       dataSource.setDriverClassName(dirverClass);
       dataSource.setUrl(url);
       dataSource.setUsername(user);
       dataSource.setPassword(password);

       return dataSource;
   }


   @Bean(name = "clusterTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager(){
       return new DataSourceTransactionManager(clusterDataSource());
   }


   @Bean(name = "clusterSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource) throws Exception {
    final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
    sessionFactoryBean.setDataSource(clusterDataSource);
    sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(ClusterDataSourceConfig.MAPPER_LOCATION));

    return sessionFactoryBean.getObject();
}

}

 14.MasterDataSourceConfig

@Configuration
@MapperScan(basePackages =MasterDataSourceConfig.PACKAGE,sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

    //隔离其他数据源

    static final  String PACKAGE="com.example.mutildatasource.dao.master";
    static final String MAPPER_LOCATION="classpath:mapper/master/*.xml";

    @Value("${master.datasource.url}")
    private String url;

    @Value("${master.datasource.username}")
    private String user;

    @Value("${master.datasource.password}")
    private String password;

    @Value("${master.datasource.driverClassName}")
    private String driverClass;



    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值