玩转Spring全家桶学习笔记(06如何配置多数据源)

application.properties文件配置

foo.datasource.url=jdbc:h2:mem:foo
foo.datasource.username=sa
foo.datasource.password=

bar.datasource.url=jdbc:h2:mem:bar
bar.datasource.username=sa
bar.datasource.password=

类文件

package com.cocabit.spring;

import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import lombok.extern.slf4j.Slf4j;

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
		DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class })
@Slf4j
public class MutiDataSourceDemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(MutiDataSourceDemoApplication.class, args);
	}

	@Bean
	@ConfigurationProperties("foo.datasource")
	public DataSourceProperties fooDataSourceProperties() {
		return new DataSourceProperties();
	}
	@Bean
	public DataSource fooDataSource() {
		DataSourceProperties dataSourceProperties = fooDataSourceProperties();
		log.info("foo datasource:{}", dataSourceProperties.getUrl());
		return dataSourceProperties.initializeDataSourceBuilder().build();
	}
	@Bean
	@Resource
	public PlatformTransactionManager fooTxManager(DataSource fooDataSource) {
		return new DataSourceTransactionManager(fooDataSource);
	}
	
	@Bean
	@ConfigurationProperties("bar.datasource")
	public DataSourceProperties barDataSourceProperties() {
		return new DataSourceProperties();
	}
	@Bean
	public DataSource barDataSource() {
		DataSourceProperties dataSourceProperties = barDataSourceProperties();
		log.info("bar datasource:{}", dataSourceProperties.getUrl());
		return dataSourceProperties.initializeDataSourceBuilder().build();
	}
	@Bean
	@Resource
	public PlatformTransactionManager barTxManager(DataSource barDataSource) {
		return new DataSourceTransactionManager(barDataSource);
	}
}

1.先来说说小豆子Bean

POJO(Plain Ordinary Java Object)or(Plain Old Java Object)简单的JAVA对象。

划重点“简单”,到底是多简单呢?

public class Student {
	private String nameString;
	public String getNameString() {
		return nameString;
	}
	public void setNameString(String nameString) {
		this.nameString = nameString;
	}
}

就是这么简单,只有private属性外加get set。木有实现接口,木有继承,木有构造函数,木有业务逻辑,就是这么的纯粹。

是不是很眼熟,很像与数据库表对应的类?是的,所以呢,它又被称为“Data对象”

JAVABean = POJO+无参数构造函数+可序列化

import java.io.Serializable;

public class Student implements Serializable{
	private static final long serialVersionUID = 1L;
	private String nameString;
	public String getNameString() {
		return nameString;
	}
	public void setNameString(String nameString) {
		this.nameString = nameString;
	}
	public Student() {
		
	}
}

如果不仅仅在内存中使用,而且需要在网络中传输,需要保存下来,那么就需要序列化。

SpringBean

long long ago,Spring是用来设计管理JavaBean的,所以Spring管理的对象也是Bean。现在Spring可以管理任何对象了。什么叫任何,就是包括JavaBean,还有那么没有private或者没有默认构造函数,或者没有get set方法的对象。

受Spring容器管理的对象 = SpringBean = JavaBean + 不是JavaBean的对象

@Bean

加在方法上的@Bean表示,这个方法要返回一个 对象 了昂,Spring容器你给我管好了。

2.@SpringBootApplication中的exclude

DataSourceAutoConfiguration.classDataSourceProperties
DataSourceTransactionManagerAutoConfiguration.classPlatformTransactionManager
JdbcTemplateAutoConfiguration.classDataSource

3.@ConfigurationProperties

将同类的配置信息自动封装成实体类

从两方面来理解这个注释

①配置信息,很显然此处的foo.datasource是配置的一个键值,只是用来区分datasource而已,只要在@ConfigurationProperties写明你要封装哪个配置就好了。

②同类=与类相匹配

此处是与什么类相匹配呢?显而易见是DataSourceProperties。那这个类里面有什么呢?Ctrl+鼠标左键单击,去看看这个类。

你就会发现,url,username,password赫然在列。还有别的一些属性,例如name,driverClassName

让我们大胆的推测一下,是不是在配置文件中添加

foo.datasource.name = kuangniaokuang

然后通过注释,也能一下get到name值呢。你猜对了。

是不是很神奇,就这么biubiu一下,就把配置文件的值,放到了一个实体类中了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值