我正在构建一个Springboot应用程序,它需要与2个不同的数据库(DB2和Oracle)进行通信。
Spring-boot-starter-父版本2.6.6
Hibernate版本5.6.7。最终的
我首先添加了DB2支持,在我在应用程序中添加了与oracle相关的设置之前,这种支持一直运行良好。下面的属性文件。
添加oracle相关设置会导致以下错误:
org.hibernate.HibernateException:对DialectResolutionInfo的访问在'hibernate.dialect'未设置时不能为空
以下是我application.properties的数据库和Hibernate相关设置:
# ==============================
# = DB2
db2.datasource.jdbc-url=jdbc:db2://SERVER1:PORT/DATABASE-1:currentSchema=SCHEMA;
db2.datasource.username=USER1
db2.datasource.password=PASSWORD1
db2.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver
db2.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2390Dialect
# ==============================
# = ORACLE
oracle.datasource.jdbc-url=jdbc:oracle:thin:@SERVER2:PORT/DATABASE-2
oracle.datasource.username=USER2
oracle.datasource.password=PASSWORD2
oracle.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
# ==============================
# = JPA / HIBERNATE
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
我的pom。xml包含oracle和DB2的依赖项以及其他必需的依赖项:
...
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
...
我已经将我的实体、存储库和数据源配置放入了不同的包中,因为我阅读了本文的要求https://www.javadevjournal.com/spring-boot/multiple-data-sources-with-spring-boot/.我的包结构如下所示:
project
- dataconfig
- db2
- config
- entity
- repository
- oracle
- config
- entity
- repository
我还添加了一些实体和存储库以及我的配置类。
这是我的DB2Configuration类:
package project.dataconfig.db2.config;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "db2EntityManagerFactory",
transactionManagerRef = "db2TransactionManager",
basePackages = {
"project.dataconfig.db2.repository"
}
)
public class Db2Configuration {
@Primary
@Bean(name = "db2DataSource")
@ConfigurationProperties(prefix = "db2.datasource")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "db2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder
, @Qualifier("db2DataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("project.dataconfig.db2.entity")
.persistenceUnit("db2persistanceunit")
.build();
}
@Primary
@Bean(name = "db2TransactionManager")
public PlatformTransactionManager db2TransactionManager(
@Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory) {
return new JpaTransactionManager(db2EntityManagerFactory);
}
}
以下是我的OracleConfiguration类:
package project.dataconfig.oracle.config;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "oracleEntityManagerFactory",
transactionManagerRef = "oracleTransactionManager",
basePackages = {
"project.dataconfig.oracle.repository"
}
)
public class OracleConfiguration {
@Bean(name = "oracleDataSource")
@ConfigurationProperties(prefix = "oracle.datasource")
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder
, @Qualifier("oracleDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("project.dataconfig.oracle.entity")
.persistenceUnit("oraclepersistanceunit")
.build();
}
@Bean(name = "oracleTransactionManager")
public PlatformTransactionManager oracleTransactionManager(
@Qualifier("oracleEntityManagerFactory") EntityManagerFactory oracleEntityManagerFactory) {
return new JpaTransactionManager(oracleEntityManagerFactory);
}
}
在我在application.properties文件中添加oracle相关设置之前,我的应用程序只使用上面描述的DB2设置进行查找。
添加与oracle相关的设置和配置后,我开始出现以下错误:
org.hibernate.HibernateException:对DialectResolutionInfo的访问在'hibernate.dialect'未设置时不能为空
基于这个错误,我认为问题是由我在应用程序中对Hibernate方言的设置引起的。属性文件。我认为这是两种设置之一造成的
...
db2.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2390Dialect
...
oracle.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
如何解决此问题?
我弄明白了。
修改Db2Configuration和OracleConfiguration的方法entityManagerFactory,为他们提供有关hibernate方言的信息:
对于DB2
@Primary
@Bean(name = "db2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder
, @Qualifier("db2DataSource") DataSource dataSource) {
final HashMap<String, Object> hibernateProperties = new HashMap<String, Object>();
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.DB2390Dialect");
return builder
.dataSource(dataSource)
.packages("project.dataconfig.db2.entity")
.properties(hibernateProperties)
.persistenceUnit("db2persistanceunit")
.build();
}
对于Oracle
@Bean(name = "oracleEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder
, @Qualifier("oracleDataSource") DataSource dataSource) {
final HashMap<String, Object> hibernateProperties = new HashMap<String, Object>();
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
return builder
.dataSource(dataSource)
.packages("project.dataconfig.oracle.entity")
.properties(hibernateProperties)
.persistenceUnit("oraclepersistanceunit")
.build();
}
在此之后,我的控制台在运行应用程序时显示,指示一切正常:
HHH000400: Using dialect: org.hibernate.dialect.DB2390Dialect
Initialized JPA EntityManagerFactory for persistence unit 'db2persistanceunit'
HHH000204: Processing PersistenceUnitInfo [name: oraclepersistanceunit]
HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
Initialized JPA EntityManagerFactory for persistence unit 'oraclepersistanceunit'
我的执行器 /healthendpoint也将这两个数据库视为已启动并正在运行。
我试图运行一个Spring引导应用程序,它使用Hibernate通过Springjpa,但我得到了这个错误: 我的pom.xml文件如下: 我的Hibernate配置是(方言配置在这个类的最后一个方法中): 我在这里做错了什么?
即使设置了hibernate,我也会遇到异常。方言属性。我使用的是hibernate 5.0.11和spring boot 1.4.2,mysql版本为5.7 波姆。xml 这里有什么问题?
Spring启动应用程序。我有此数据源: 和在应用程序属性: 因为我们的应用程序有另一个数据库,为了简单起见这里省略了。 它正在连接到引擎版本 5.6.mysql_aurora.1.22.5 的 AWS Aurora 实例 应用程序启动失败,出现多条消息,包括 (这就是为什么我引用了上面的特定来源,因为其中定义了)但最后是可怕的 我之所以使用MariaDB,是因为IntelliJ数据库连接工具推荐
我有个Spring 这是我的配置: 我找到了一些关于这个问题的帖子,但没有修复它。
我正在和几个人一起为学校做一个项目。当我运行我的项目时,我得到了一堆错误,这些错误似乎是由以下原因引起的:当“hibernate”时,对DialectResolutionInfo的访问不能为空。未设置方言。 这是我的砰.xml: 这是我的错误报告: 这是因为缺少家属而引起的问题吗?我是个java新手,我自己似乎找不到问题。
我在我的本地笔记本电脑上运行这个,它似乎工作正常,但是每次我试图在不同的服务器上运行时,都会出现以下错误。(均使用Java8u291)