注解+AbstractRoutingDataSource实现多数据源

本文介绍了如何通过自定义注解配合AbstractRoutingDataSource来实现动态选择数据源。这种方式使得实体类与数据源的绑定更加灵活,提高了代码的可读性和可维护性。相较于直接在实体类中添加数据源字段或使用Map存储数据源key,此方法降低了耦合度。

利用自定义注解给实体类设置AbstractRoutingDataSource的数据源的key。选择数据源时,通过获取注解设置的key值选择不同的数据源。

使用场景:提取公共方法,利用注解设置key值。实现实体类与选择数据源的解耦,且更直观可读性强(个人理解)。通过在实体类中添加数据源字段存储key值的方法,增加耦合,且bean的定义存在不相关字段。而利用map存储数据源key,数据源不直观,降低代码可读性。

AbstractRoutingDataSource使用参考上一篇:Spring利用AbstractRoutingDataSource实现多数据源

定义注解:

package com.learn.table;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Table {
	//设置数据源的key
	public String dbName();
}

实体类:

package com.learn.pojo;

import com.learn.table.Table;

//定义类时就确定要使用的数据源
@Table(dbName="dataSource2")
public class Work {
	
	private String workId;
	
	private String workName;

	public String getWorkId() {
		return workId;
	}

	public void setWorkId(String workId) {
		this.workId = workId;
	}

	public String getWorkName() {
		return workName;
	}

	public void setWorkName(String workName) {
		this.workName = workName;
	}
	
}
使用:

package com.learn.moreDate;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import com.learn.pojo.Work;
import com.learn.table.Table;

public class Demo {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("classpath:config/applicationContext.xml");		
		//获取Work的Table注解
		Table table = (Table)Work.class.getAnnotation(Table.class);
		//获取Table的值并设置数据源key值
		CustomerContextHolder.setCustomerType(table.dbName());
		//获取数据源
		DataSource dds = (DataSource)context.getBean("dynamicDataSource");
		//执行sql
		JdbcTemplate template = new JdbcTemplate(dds);
		String sql = "delete from work";
		template.update(sql);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值