springboot整合多数据源(四)
来源:互联网 发布:lol末日人工智能投票 编辑:程序博客网 时间:2024/05/29 02:48
1配置文件中新增两个数据源
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driverspring.datasource.test1.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8spring.datasource.test1.username = rootspring.datasource.test1.password = rootspring.datasource.test2.driverClassName = com.mysql.jdbc.Driverspring.datasource.test2.url =jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8spring.datasource.test2.username = rootspring.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.*"})@EnableAutoConfigurationpublic class App { /** * @param args */ //标识为启动类 public static void main(String[] args) { SpringApplication.run(App.class, args); }}
阅读全文
0 0
- springboot整合多数据源(四)
- SpringBoot整合Mybatis多数据源
- SpringBoot整合Mybatis多数据源
- SpringBoot整合多数据源xml方式
- Springboot整合Mybatis实现Druid多数据源
- springboot 多数据源
- springboot多数据源
- springboot多数据源(mybatis)
- springboot 配置多数据源
- springboot 配置多数据源
- SpringBoot-SpringData-多数据源
- springboot 多数据源配置
- springboot + mybatis + 多数据源
- SpringBoot+Mybatis多数据源
- springboot + mybatis + 多数据源
- springboot 多数据源问题
- Springboot 多数据源配置
- SpringBoot配置多数据源
- Python for Everyone
- Vue父子通信 props
- 【Python基础】1.4.7 Turtle实例——用Python作画之彩虹
- javascript开发出文字修改样式
- JavaScript 的23种设计模式
- springboot整合多数据源(四)
- SQLHelper
- 元组
- C#string类型的特性和方法
- ROS学习笔记7 服务、包
- 网关与网络地址(网络号)以及IP地址、广播地址
- Python爬虫(三):爬取猫眼电影网经典电影TOP100信息并存入本地Markdown文件(上)
- c语言学习日记1
- JavaEE开发使用MySQL连接池原理及好处