SpringBoot(2.1.1)整合多数据源(四)

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);
    }

}

 

3. 创建分包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. 启动项目

/**
 *
 */
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);
    }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是整合Jedis的步骤: 1. 添加Jedis依赖 在 pom.xml 文件中添加 Jedis 的依赖: ``` <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency> ``` 2. 配置Jedis连接池 在 Spring Boot 中,可以在 application.properties 文件中配置 Jedis 连接池相关的信息。例如: ``` # Redis spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.database=0 # jedis pool config spring.redis.jedis.pool.max-active=8 spring.redis.jedis.pool.max-idle=8 spring.redis.jedis.pool.max-wait=-1ms spring.redis.jedis.pool.min-idle=0 ``` 3. 创建Jedis实例 在需要使用 Jedis 的类中,可以通过以下方式创建 Jedis 实例: ``` @Component public class RedisUtil { @Autowired private JedisPool jedisPool; public Jedis getJedis() { return jedisPool.getResource(); } public void close(Jedis jedis) { if (jedis != null) { jedis.close(); } } } ``` 这里使用了 Spring Boot 的依赖注入机制,通过注入 JedisPool 对象来获取 Jedis 实例。 4. 使用Jedis 通过以上步骤,就可以在项目中使用 Jedis 了,例如: ``` @Autowired private RedisUtil redisUtil; public void set(String key, String value) { Jedis jedis = null; try { jedis = redisUtil.getJedis(); jedis.set(key, value); } finally { redisUtil.close(jedis); } } public String get(String key) { Jedis jedis = null; try { jedis = redisUtil.getJedis(); return jedis.get(key); } finally { redisUtil.close(jedis); } } ``` 以上代码中,通过 RedisUtil 工具类获取 Jedis 实例,并使用该实例进行 Redis 操作。操作完成后,需要手动关闭 Jedis 连接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值