2021SC@SDUSC-SDUDOC-blog15

本文详细介绍了如何在Spring Boot应用中配置两个数据源ds1和ds2,包括`@Primary`注解的应用,以及分别对每个数据源进行JPA配置,如实体扫描、事务管理等。重点展示了`@Bean`注解在创建DataSource和相关配置中的作用。
摘要由CSDN通过智能技术生成

2021SC@SDUSC
后端engine config部分
在这里插入图片描述
体现分布式(双数据源):


    //主数据源 ds1数据源
    @Primary
    @Bean(name = "ds1DataSource")
    public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }

    // ds2数据源
    @Bean(name = "ds2DataSourceProperties")
    @ConfigurationProperties(prefix = "spring.datasource.ds2")
    public DataSourceProperties ds2DataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "ds2DataSource")
    public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }
}

@bean注解用法在前面介绍过了,把Bean理解为类的代理或代言人(实际上通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了。在Spring中,你标识一个@符号,那么Spring就会来看看,并且从这里拿到一个Bean或者给出一个Bean。

又查看了一下源码:

public @interface Bean {
    @AliasFor("name")
    String[] value() default {};

    @AliasFor("value")
    String[] name() default {};

    /** @deprecated */
    @Deprecated
    Autowire autowire() default Autowire.NO;

    boolean autowireCandidate() default true;

    String initMethod() default "";

    String destroyMethod() default "(inferred)";
}

建立第一个数据源时:

    //主数据源 ds1数据源
    @Primary
    @Bean(name = "ds1DataSource")
    public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }

DataSource 作为一个接口实现,其实可以看作数据源,查看源代码可以发现,其封装了数据库参数,连接数据库,程序中操作DataSource对象即可对数据库进行增删改查操作。
在这里插入图片描述ds2建立方式与ds1相同。
建立好后:
在这里插入图片描述
ds1config对第一个数据源进行jpa的相关配置。如下注释:

@Configuration
@EntityScan(basePackages = "cn.edu.sdu.entity.ds1")
//1、实体扫描
//2、实体管理ref
//3、事务管理
@EnableJpaRepositories(
        basePackages = "cn.edu.sdu.repository.ds1",
        entityManagerFactoryRef = "ds1EntityManagerFactoryBean",
        transactionManagerRef = "ds1TransactionManager")
@EnableTransactionManagement
public class Ds1Config {

    //第一个数据源,可以不加Qualifier
    @Autowired
    @Qualifier("ds1DataSource")
    private DataSource dataSource;

    //jpa其他参数配置
    @Autowired
    private JpaProperties jpaProperties;

    @Autowired
    private HibernateProperties hibernateProperties;

    //实体管理工厂builder
    @Autowired
    private EntityManagerFactoryBuilder factoryBuilder;

    /**
     * 配置第一个实体管理工厂的bean
     */
    @Primary
    @Bean(name = "ds1EntityManagerFactoryBean")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
        return factoryBuilder.dataSource(dataSource)
                //这一行的目的是加入jpa的其他配置参数比如(ddl-auto: update等)
                //当然这个参数配置可以在事务配置的时候也可以
                .properties(hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings()))
                .packages("cn.edu.sdu.entity.ds1")
                .persistenceUnit("ds1PersistenceUnit")
                .build();
    }

    /**
     * EntityManager
     */
    @Primary
    @Bean(name = "ds1EntityManager")
    public EntityManager entityManager() {
        return Objects.requireNonNull(entityManagerFactoryBean().getObject()).createEntityManager();
    }

    /**
     * jpa事务管理
     */
    @Primary
    @Bean(name = "ds1TransactionManager")
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }
}

第二个数据源:
与第一个源一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chi Z犬里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值