注解+AbstractRoutingDataSource实现多数据源

来源:互联网 发布:精通matlab接口与编程 编辑:程序博客网 时间:2024/05/20 10:51

利用自定义注解给实体类设置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)@Documentedpublic @interface Table {//设置数据源的keypublic 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");//执行sqlJdbcTemplate template = new JdbcTemplate(dds);String sql = "delete from work";template.update(sql);}}



0 0