您当前的位置: 首页 >  spring

陈橙橙丶

暂无认证

  • 1浏览

    0关注

    107博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot多数据源配置

陈橙橙丶 发布时间:2020-05-07 09:28:17 ,浏览量:1

一、配置数据源信息
app.datasource.db1.url=jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
app.datasource.db1.username=root
app.datasource.db1.password=root
app.datasource.db1.driver-class-name=com.mysql.jdbc.Driver

app.datasource.db2.url=jdbc:mysql://localhost:3306/db2?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
app.datasource.db2.username=root
app.datasource.db2.password=root
app.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
二、进行注入
@Configuration
public class JdbcDataSourceConfig {
   
    @Bean
    @ConfigurationProperties(prefix = "app.datasource.db1")
    public DataSourceProperties db1DataSourceProperties(){
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties(prefix = "app.datasource.db2")
    public DataSourceProperties db2DataSourceProperties(){
        return new DataSourceProperties();
    }

  
    @Bean
    public DataSource db1DataSource(){
        return db1DataSourceProperties().initializeDataSourceBuilder().build();
    }


    @Bean
    public DataSource db2DataSource(){
        return db2DataSourceProperties().initializeDataSourceBuilder().build();
    }

    @Bean(name = "db1JdbcTemplate")
    public JdbcTemplate db1JdbcTemplate(){
        return new JdbcTemplate(db1DataSource());
    }
    @Bean(name = "db2JdbcTemplate")
    public JdbcTemplate db2JdbcTemplate(){
        return new JdbcTemplate(db2DataSource());
    }
}

@ConfigurationProperties:与@Configuration作用一样声明为一个配置类。 我们尝试启动这个SpringBoot: 在这里插入图片描述 发现出现了错误,错误的原因也很直观,就是说原本单例的数据源出现多个。导入不知道注入哪个而报错,那么如何解决? 解决的办法有两种: 一:使用@Primary注解:我们在上面JdbcDataSourceConfig类中的db1相关配置中加入此注解;

	@Primary
    @Bean
    @ConfigurationProperties(prefix = "app.datasource.db1")
    public DataSourceProperties db1DataSourceProperties(){
        return new DataSourceProperties();
    }
    @Primary
    @Bean
    public DataSource db1DataSource(){
        return db1DataSourceProperties().initializeDataSourceBuilder().build();
    }

再次启动,启动成功 二:在启动类中配置移除自带的数据信息

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class
})
public class SpringBootStarterDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootStarterDemoApplication.class, args);
    }

}

启动,同样成功。

三、测试
@SpringBootTest
class SpringBootStarterDemoApplicationTests {

    @Test
    void contextLoads() {
    }
    @Autowired
    JdbcTemplate db2JdbcTemplate;
    @Autowired
    DataSource dataSource;
    @Test
    public void addDataData(){
        String sql = "insert into user_info(name,age) values('ccc',18)";
        db2JdbcTemplate.execute(sql);
    }
}

在这里插入图片描述 我们在切换数据源到db1: 修改一下注入的name即可。

@SpringBootTest
class SpringBootStarterDemoApplicationTests {

    @Test
    void contextLoads() {
    }

    @Autowired
    JdbcTemplate db1JdbcTemplate;

    @Autowired
    DataSource dataSource;

    @Test
    public void addDataData(){
        String sql = "insert into user_info(name,age) values('ccc',18)";
        db1JdbcTemplate.execute(sql);
    }
}

在这里插入图片描述 db1中也有了数据。

到此,简单的多数据配置就成功了,如果您发现有不正确的地方,恳请批评指出,在此感谢!

关注
打赏
1648473527
查看更多评论
立即登录/注册

微信扫码登录

0.0358s