Oracle与mysql双数据源配置_springboot配置mysql和oracle双数据源

该博客介绍了如何在SpringBoot应用中配置Oracle和MySQL两个不同的数据源。通过DbConfig类,创建了两个数据源bean(datasource1和datasource2),分别对应Oracle和MySQL数据库,并使用SimpleDriverDataSource进行连接。同时,为每个数据源配置了LocalContainerEntityManagerFactoryBean和PlatformTransactionManager,以支持JPA操作和事务管理。配置中包含了数据库连接信息、实体管理器和事务管理器的设置。
摘要由CSDN通过智能技术生成

//DbConfig.java

package transfer;

import com.mysql.cj.jdbc.Driver;

import oracle.jdbc.OracleDriver;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.core.env.Environment;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import org.springframework.jdbc.datasource.SimpleDriverDataSource;

import org.springframework.orm.jpa.JpaTransactionManager;

import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

import java.sql.SQLException;

import java.util.HashMap;

/**

* 数据库配置

* @author zhanghui

* @date 2019/5/7

*/

@Configuration

public class DbConfig {

@Autowired

private Environment env;

/**

* EnableJpaRepositories 注解关联repository与entityManage,entityManage决定数据源

*/

@EnableJpaRepositories(

basePackages = "transfer.db1",

entityManagerFactoryRef = "entityManage1",

transactionManagerRef = "transactionManager1"

)

@Configuration

class db1{

@Bean("datasource1")

@Primary

public DataSource getDataSource1() {

return new SimpleDriverDataSource(

new OracleDriver(),

"jdbc:oracle:thin:@192.168.1.142:1521:aaa",

"aaa",

"123456");

}

/**

* entityManage 在用jpa原生sql 查询时,(非JpaRepository),注意注入的EntityManage的qualifier值

* @param dataSource

* @return

*/

@Bean("entityManage1")

@Primary

public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean1(@Qualifier("datasource1")DataSource dataSource) {

return getFactory(dataSource,"transfer.db1.entity","unit1","org.hibernate.dialect.MySQL5InnoDBDialect");

}

@Bean("transactionManager1")

@Primary

public PlatformTransactionManager transactionManager1(@Qualifier("entityManage1") LocalContainerEntityManagerFactoryBean entityManageFactory) {

JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(entityManageFactory.getObject());

return transactionManager;

}

}

@EnableJpaRepositories(

basePackages = "transfer.db2",

entityManagerFactoryRef = "entityManage2",

transactionManagerRef = "transactionManager2"

)

@Configuration

class db2{

@Bean("datasource2")

public DataSource getDataSource2() {

DataSource dataSource = null;

try {

dataSource = new SimpleDriverDataSource(

new Driver(),

"jdbc:mysql://192.168.1.196:3306/ddd?useOldAliasMetadataBehavior=true&useSSL=false&zeroDateTimeBehavior=convertToNull",

"ddd",

"123456");

} catch (SQLException e) {

e.printStackTrace();

}

return dataSource;

}

@Bean("entityManage2")

public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean2(@Qualifier("datasource2")DataSource dataSource) {

return getFactory(dataSource,"transfer.db2.entity2","unit2","org.hibernate.dialect.OracleDialect");

}

@Bean("transactionManager2")

public PlatformTransactionManager transactionManager2(@Qualifier("entityManage2") LocalContainerEntityManagerFactoryBean entityManageFactory) {

JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(entityManageFactory.getObject());

return transactionManager;

}

}

private LocalContainerEntityManagerFactoryBean getFactory(DataSource dataSource, String baseEntityPackage, String unitName, String dialect){

LocalContainerEntityManagerFactoryBean em

= new LocalContainerEntityManagerFactoryBean();

em.setDataSource(dataSource);

em.setPackagesToScan(baseEntityPackage);

em.setPersistenceUnitName(unitName);

HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

em.setJpaVendorAdapter(vendorAdapter);

HashMap properties = new HashMap<>();

properties.put("hibernate.show_sql", "true");

properties.put("hibernate.ddl-auto", "none");

properties.put("hibernate.format_sql", "false");

properties.put("hibernate.dialect", dialect);

// properties.put("hibernate.default_schema", "BIRD_CCB");

em.setJpaPropertyMap(properties);

return em;

}

}

MyBatis Plus是基于MyBatis的一个增强工具,通过提供更简洁、更方便的API,简化了对数据库的操作。相比于原生的MyBatis,MyBatis Plus提供了更丰富的功能和更高效的性能。而OracleMySQL都是常见的关系型数据库,它们在底层实现原理和语法特性上有一些不同。 对于数据源配置,可以通过MyBatis Plus的多数据源配置来实现。首先,需要在配置文件中定义两个不同的数据源,分别对应OracleMySQL。可以使用不同的dataSource和transactionManager配置来指定每个数据源的连接和事务管理。 然后,在代码中使用@DS注解来指定具体是使用哪个数据源。@DS注解可以标记在类级别和方法级别,用来指定使用的数据源。例如,@DS("oracle")标记在类级别上,表示该类中的所有方法都使用Oracle数据源,而@DS("mysql")标记在方法级别上,表示该方法使用MySQL数据源。 通过这样的配置,就可以实现在同一个应用中同时使用OracleMySQL数据源。在使用的过程中,可以根据业务需求灵活选择具体使用的数据库。同时,MyBatis Plus还提供了很多便捷的方法和功能,可以更方便地进行数据库操作。 总之,通过MyBatis Plus的多数据源配置,可以很方便地实现OracleMySQL数据源的使用。这样的配置对于一些需要同时操作多个数据库的应用来说非常有用,可以满足不同业务需求的多样性。使用MyBatis Plus可以提高开发效率和代码质量,使数据库操作变得更简单和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值