springboot整合多数据源(四)
2017-11-26 16:37
399 查看
1配置文件中新增两个数据源
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver spring.datasource.test1.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8 spring.datasource.test1.username = root spring.datasource.test1.password = root spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver spring.datasource.test2.url =jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8 spring.datasource.test2.username = root spring.datasource.test2.password = root
2配置文件中新增两个数据源
package com.ljl.spring.boot.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.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; 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.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration // 注入到spring容器中.. @MapperScan(basePackages = "com.ljl.spring.boot.test1", sqlSessionFactoryRef = "test1SqlSessionFactory") public class Datasource1 { /** * @methodDesc: 功能描述:(配置test1数据库) */ @Bean(name = "test1DataSource") @ConfigurationProperties(prefix = "spring.datasource.test1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } /** * @methodDesc: 功能描述:(test1 sql会话工厂) */ @Bean(name = "test1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } /** * 当存在多于1个数据源的时候,必须选择一个作为主数据源(Primary DataSource), * 即如果数据库操作没有指明使用哪个数据源的时候,默认使用主数据源。 * 同时,把数据源绑定到不同的JdbcTemplate上。 * 用@Primary把其中某一个Bean标识为“主要的”,使用@Autowired注入时会首先使用被标记为@Primary的Bean。 */ /** * @methodDesc: 功能描述:(test1 事物管理) */ @Bean(name = "test1TransactionManager") @Primary public DataSourceTransactionManager test1TransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 使用@Autowired注释进行byType注入,如果需要byName(byName就是通过id去标识)注入, * 增加@Qualifier注释。一般在候选Bean数目不为1时应该加@Qualifier注释。 * 在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。 * 当找不到一个匹配的 Bean 时,Spring 容器将抛出 * BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。 * 和找不到一个类型匹配 Bean 相反的一个错误是:如果 Spring 容器中拥有多个候选 Bean, * Spring 容器在启动时也会抛出 BeanCreationException 异常。 * Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常: * * @param sqlSessionFactory * @return * @throws Exception */ @Bean(name = "test1SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
package com.ljl.spring.boot.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.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; 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.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration // 注入到spring容器中.. @MapperScan(basePackages = "com.ljl.spring.boot.test2", sqlSessionFactoryRef = "test2SqlSessionFactory") public class Datasource2 { /** * @methodDesc: 功能描述:(配置test2数据库) */ @Bean(name = "test2DataSource") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } /** * @methodDesc: 功能描述:(test2 sql会话工厂) */ @Bean(name = "test2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } /** * @methodDesc: 功能描述:(test2 事物管理) */ @Bean(name = "test2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
4.4.2创建分包Mapper
分别放在com.ljl.spring.boot.test1包和com.ljl.spring.boot.test2包中package com.ljl.spring.boot.test1.mappins; import com.ljl.spring.boot.test1.entity.User1Entity; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; public interface User1Mappin { @Insert("insert into users values(null,#{name},#{age});") public int addUser(@Param("name") String name, @Param("age") Integer age); @Select(" select * from users where id = #{id} ") public User1Entity selectUser(@Param("id") Integer id); }
package com.ljl.spring.boot.test2.mappins; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Param; public interface User2Mappin { @Insert("insert into users values(null,#{name},#{age});") public int addUser(@Param("name") String name, @Param("age") Integer age); }
4.4.3启动项目
/** * */ package com.ljl.spring.boot; import com.ljl.spring.boot.config.DBConfig1; import com.ljl.spring.boot.config.DBConfig2; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.ComponentScan; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @author dell */ @MapperScan("com.ljl.*")//扫描:该包下相应的class,主要是MyBatis的持久化类. //@EnableTransactionManagement @ComponentScan(basePackages = {"com.ljl.*"}) @EnableAutoConfiguration public class App { /** * @param args */ //标识为启动类 public static void main(String[] args) { SpringApplication.run(App.class, args); } }
相关文章推荐
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
- springboot整合多个mybatis数据源
- (1)、Spring Boot与Mybatis的整合(单数据源)
- Spring Boot 整合多数据源
- spring boot整合mybatis使用c3p0数据源连接mysql
- SpringBoot整合druid数据源及添加Druid监控页面
- Spring boot 整合 alibaba.druid 数据源
- spring-boot | 使员Druid 整合Mybatis 最简配置多数据源
- spring boot整合mybatis使用c3p0数据源连接mysql
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
- (2)、Spring Boot与Mybatis的整合( 多数据源)
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
- (十一)Spring Boot整合Mybatis使用druid实现多数据源自动切换
- Spring Boot 整合mybatis 使用多数据源的实现方法
- Springboot整合Mybatis实现Druid多数据源
- 9-Spring Boot ( 整合多数据源 )
- spring boot学习6之mybatis+PageHelper分页插件+jta多数据源事务整合
- spring Boot 整合mybatis 如何使用多数据源
- SpringBoot整合Mybatis,多数据源,事务,支持java -jar 启动.