标签:Springboot JPA 数据源 springframework import org com name
Springboot多数据源配置以及JPA集成
两个数据源都为oracle数据库。
Springboot多数据源配置以及JPA集成
1、pom文件添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 添加Hibernate支持 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.12.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.12.Final</version>
</dependency>
2、application.yml配置
spring:
profiles:
active: dev
datasource:
druid:
oracle:
type: com.alibaba.druid.pool.DruidDataSource
platform: oracle
url: jdbc:oracle:thin:@127.0.0.1:1521/ORCL
driverClassName: oracle.jdbc.driver.OracleDriver
username: C##development
password: C##development
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat,wall,log4
logSlowSql: true
secondary:
type: com.alibaba.druid.pool.DruidDataSource
platform: secondary
url: jdbc:oracle:thin:@127.0.0.1:1521/ORCL
driverClassName: oracle.jdbc.driver.OracleDriver
username: C##development
password: C##development
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat,wall,log4j
logSlowSql: true
jpa:
database: ORACLE
hibernate:
ddl-auto: none
properties.javax.persistence.validation.mode: none
3、添加主数据源以及第二数据源
1)主数据源(OracleDatasourceConfig)
/**
* FileName: OracleDatasourceConfig
* Author: Administrator
* Date: 2021/1/22 14:46
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yangxf.si.config.datasourse;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
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.sql.DataSource;
import java.util.Properties;
/**
* 〈默认数据源:oracle数据源〉<br>
* 〈〉
*
* @author Administrator
* @create 2021/1/22
* @since 1.0.0
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = {OracleDatasourceConfig.PACKAGE}
)
public class OracleDatasourceConfig {
// oracle扫描路径
static final String PACKAGE = "com.yangxf.si.modules.business";
@Primary
@Bean(name = "oracleDataSource")
@ConfigurationProperties("spring.datasource.druid.oracle")
public DataSource oracleDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "entityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder) {
LocalContainerEntityManagerFactoryBean em = builder
.dataSource(oracleDataSource())
.packages(new String[]{"com.yangxf.si"})
.persistenceUnit("oracle")
.build();
Properties properties = new Properties();
properties.setProperty("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
em.setJpaProperties(properties);
return em;
}
@Bean(name = "transactionManager")
@Primary
PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactory(builder).getObject());
}
}
2)第二数据源(SecondaryDatasourceConfig)
/**
* FileName: OracleDatasourceConfig
* Author: Administrator
* Date: 2021/1/22 14:46
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yangxf.si.config.datasourse;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
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.sql.DataSource;
import java.util.Properties;
/**
* 〈默认数据源:secondary数据源〉<br>
* 〈〉
*
* @author Administrator
* @create 2021/1/22
* @since 1.0.0
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactorySecondary",
transactionManagerRef = "transactionManagerSecondary")
public class SecondaryDatasourceConfig {
// oracle扫描路径
static final String PACKAGE = "com.yangxf.si.modules.business";
@Bean(name = "secondaryDataSource")
@ConfigurationProperties("spring.datasource.druid.secondary")
public DataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(
EntityManagerFactoryBuilder builder) {
LocalContainerEntityManagerFactoryBean em = builder
.dataSource(secondaryDataSource())
.packages(new String[]{"com.yangxf.si"})
.persistenceUnit("secondary")
.build();
Properties properties = new Properties();
properties.setProperty("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
em.setJpaProperties(properties);
return em;
}
@Bean(name = "transactionManagerSecondary")
PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
}
}
4、项目demo服务实现
package com.yangxf.si.modules.business.service;
import com.yangxf.si.modules.business.entity.ProjectDemo;
import com.yangxf.si.modules.business.entity.ProjectDemoRepository;
import org.hibernate.SQLQuery;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;
/**
* 项目demo服务实现
*
* @author Administrator
*/
@Service
public class ProjectDemoServiceImpl implements ProjectDemoService {
@PersistenceContext(unitName = "secondary")
private EntityManager entityManagerSecondary;
@PersistenceContext
private EntityManager entityManager;
@Autowired
private ProjectDemoRepository projectDemoRepository;
@Override
public void saveProjectDemo(final ProjectDemo projectDemo) {
projectDemoRepository.save(projectDemo);
}
/**
* 查询主数据源
* @param name
* @param idNumber
* @return
*/
@Override
public List <ProjectDemo> queryMaster(String name, String idNumber) {
StringBuilder sql = new StringBuilder();
sql.append("select * from PROJECT_DEMO where name=:name and id_Number=:idNumber ");
Query p = entityManager.createNativeQuery(sql.toString());
p.setParameter("name", name);
p.setParameter("idNumber", idNumber);
p.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List <ProjectDemo> list = p.getResultList();
return list;
}
/**
* 查询第二数据源
* @param name
* @param idNumber
* @return
*/
@Override
public List <ProjectDemo> querySecondary(String name, String idNumber) {
StringBuilder sql = new StringBuilder();
sql.append("select * from PROJECT_DEMO where name=:name and id_Number=:idNumber ");
Query p = entityManagerSecondary.createNativeQuery(sql.toString());
p.setParameter("name", name);
p.setParameter("idNumber", idNumber);
p.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List <ProjectDemo> list = p.getResultList();
return list;
}
}
标签:Springboot,JPA,数据源,springframework,import,org,com,name 来源: https://blog.csdn.net/lwd2307997664/article/details/113598374
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。