SpringBoot 配置Oracle数据源 @Primary

    项目中已经有一个数据库Cassandra在使用,因为要操作另外一张表的数据,来达到需求的实现,要配置另外一个数据库Orcale,数据springboot的多数据源配的了,

    期初不知道,就按照普通的数据库的配置来做,发现不行,领导过来一看,也说你得看看springboot的数据库配置了,不太一样,找了找其他项目上的Oracle配置,试着做了一下

    

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManager;
import javax.sql.DataSource; 

@EnableTransactionManagement
@EnableJpaRepositories(
		entityManagerFactoryRef="entityManagerFactoryPrimary",
		transactionManagerRef="transactionManagerPrimary",
		basePackages= {"com.nokia.coap.adapter.dbmsm.repo"})
@Configuration
public class OracleDBConf{
	
	@Bean(name = "primaryDataSource")
	@Primary
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix="oracleDS")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
	
	@DependsOn({"primaryDataSource"})
    @Value("#{primaryDataSource}")
	@Bean(name = "primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Primary
    @Bean(name = "entityManagerPrimary")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
    }
    
    @Primary
    @Bean(name = "entityManagerFactoryPrimary")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(primaryDataSource())
                //.properties(getVendorProperties(primaryDataSource))
                .packages("com.nokia.coap.adapter.dbmsm.model") //设置实体类所在位置
                .persistenceUnit("primaryPersistenceUnit")
                .build();
    }

    @Primary
    @Bean(name = "transactionManagerPrimary")
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    }
}

配置文件(.yml):

oracleDS:
     platform: oracle
     url: jdbc:oracle:thin:test/test@127.0.0.1:1521/oracle
     username: test
     password: test
     driverClassName: oracle.jdbc.driver.OracleDriver
     max-active: 10
     max-idle: 5
     min-idle: 2
     initial-size: 6
     validation-query: select 1 from dual
     test-while-idle: true

pom.xml:

		<dependency>
			<groupId>com.oracle.jdbc</groupId>
			<artifactId>ojdbc7</artifactId>
			<version>12.1.0.2</version>
		</dependency>
		<dependency>
    		<groupId>org.hibernate.javax.persistence</groupId>
    		<artifactId>hibernate-jpa-2.1-api</artifactId>
    		<version>1.0.0.Final</version>
		</dependency>
		<dependency>
    		<groupId>org.springframework.data</groupId>
    		<artifactId>spring-data-jpa</artifactId>
    		<version>1.11.12.RELEASE</version>
		</dependency>
		<dependency>
   			<groupId>org.springframework.boot</groupId>
   			<artifactId>spring-boot-starter-data-jpa</artifactId>
   			<version>${springboot.version}</version>
		</dependency>


posted @ 2022-01-27 18:36  zhangdaopin  阅读(1282)  评论(0编辑  收藏  举报