美文网首页分布式
Java Springboot 多数据源配置(Springboo

Java Springboot 多数据源配置(Springboo

作者: MicoCube | 来源:发表于2019-03-20 09:54 被阅读174次
  • 源码地址

  • 注意事项
    关键点在于数据源配置,配置俩数据源,具体看DataSourceConfig,
    配置各自的entityManager,事务管理器,各自的entity/repo 路径
    具体查看PrimaryConfig和SecondaryConfig,

  • 关于事务
    这个例子并不能做到跨库事务回滚,控制器/user/testTransaction
    中在test库中添加了一个用户,在secondery库中添加了一个city,
    之后触发一个异常,
    但是当触发异常之后,实际上只有City表被回滚,
    这个线程中其实始终只有一个事务管理器,当用户添加完毕之后,
    test库的事务完成,线程进入secondery的事务管理器,异常触发后,
    city表被回滚

  • Spring实现分布式事务JTA(使用atomiko实现)

  • 关于@Primary注解
    当一个接口有2个不同实现时,使用@Autowired注解时会报org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息

    • 方案1-@Qualifier
      使用Qualifier注解,选择一个对象的名称,通常比较常用
    • 方案2-@Primary
      Primary可以理解为默认优先选择,同时不可以同时设置多个,内部实质是设置BeanDefinition的primary属性
    • 示例
      @Component("metalSinger") // 加注解,让spring识别
      public class MetalSinger implements Singer{
          @Override
          public String sing(String lyrics) {
              return "I am singing with DIO voice: "+lyrics;
          }
      }
      @Primary
      @Component("operaSinger")
      public class OperaSinger implements Singer {
          @Override
          public String sing(String lyrics) {
              return "I am singing in Bocelli voice: "+lyrics;
          }
      }
      public interface Singer {
          String sing(String lyrics);
      }
      @Component
      public class SingerService {
          private static final Logger logger = LoggerFactory.getLogger(SingerService.class);
          @Autowired
          @Qualifier
          private Singer singer;
          public String sing(){
              return singer.sing("song lyrics");
          }
          public static void main(String[] args) {
              ApplicationContext context = new AnnotationConfigApplicationContext("context.annotation.primary");
              SingerService singerService = context.getBean(SingerService.class);
              System.out.println(singerService.sing());
          }
      }
    
  • 修改数据库编码

    • show create table ‘table’ 查看表结构发现 DEFAULT CHARSET=utf8
    • 修改字段编码:alter table ‘table’ convert to character set utf8;
    • 修改表的编码:ALTER TABLE ‘table’ DEFAULT CHARACTER SET utf8;
  • spring-data官方示例

相关文章

网友评论

    本文标题:Java Springboot 多数据源配置(Springboo

    本文链接:https://www.haomeiwen.com/subject/lkiamqtx.html