我正在尝试连接到两个数据库(MSSQL和PostgreSQL)。但我收到此错误:
org.springframework.beans.factory.BeanCreationException:在类路径资源[org / infobip / webrtc / admin / config / db / MssqlConfig.class]中创建名称为'entityManagerFactory'的bean时出错。方法失败;嵌套的异常是org.hibernate.service.spi.ServiceException:无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
这是我的第一个数据库的配置文件:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = "org.myorg.something.more.mssql.repo",
transactionManagerRef = "transactionManager"
)
public class MssqlConfig {
@Value("${spring.datasource.mssql.url}")
String url;
@Value("${spring.datasource.mssql.username}")
String username;
@Value("${spring.datasource.mssql.password}")
String password;
@Value("${spring.datasource.mssql.driverClassName}")
String driverClassName;
@Primary
@Bean(name = "datasource")
@ConfigurationProperties(prefix = "spring.datasource.mssql")
public DataSource dataSource() {
return DataSourceBuilder.create().url(url).username(username).password(password).driverClassName(driverClassName).build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder,
@Qualifier("datasource") DataSource dataSource) {
Map<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl..auto", "update");
properties.put("hibernate.dialect", "org.hibernate.HSQLDialect");
properties.put("show_sql", "true");
properties.put("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver");
return builder.dataSource(dataSource).properties(properties).packages("org.infobip.webrtc.admin.mssql.entity").persistenceUnit("AuditLogEntity").build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
这是第二个数据库的配置文件:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "domainEntityManagerFactory",
basePackages = "org.myorg.something.more.postgres.repository",
transactionManagerRef = "domainTransactionManager"
)
public class PostgreSQLConfig {
@Value("${spring.datasource.postgres.url}")
String url;
@Value("${spring.datasource.postgres.username}")
String username;
@Value("${spring.datasource.postgres.password}")
String password;
@Bean(name="domainDatasource")
@ConfigurationProperties(prefix="spring.datasource.postgres")
public DataSource dataSource() {
return DataSourceBuilder.create().url(url).password(password).username(username).build();
}
@Bean(name="domainEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder,
@Qualifier("domainDatasource") DataSource dataSource) {
Map<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl..auto", "update");
properties.put("hibernate.dialect", "org.hibernate.HSQLDialect");
properties.put("show_sql", "true");
return builder.dataSource(dataSource).properties(properties).packages("org.infobip.webrtc.admin.postgres.entity").persistenceUnit("DomainEntity").build();
}
@Bean(name="domainTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("domainEntityManagerFactory") EntityManagerFactory entityManagerFactory){
return new JpaTransactionManager(entityManagerFactory);
}
}
这是我的pom.xml文件(只是其中的一部分):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
这是第一个数据库的存储库:
public interface AuditLogRepo extends JpaRepository<AuditLogEntity, Long> {
}
这是第二个数据库的存储库:
public interface DomainRepository extends JpaRepository<DomainEntity, Integer> {
}
这是第一个数据库的实体:
@Entity
@Table(name = "domain")
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DomainEntity {
@Id
@SequenceGenerator(name = "pk_sequence", sequenceName = "domain_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk_sequence")
private Integer id;
private String did;
private String domain;
@Column(name = "last_modified")
private LocalDateTime lastModified;
}
这是第二个数据库的实体:
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name="auditlog")
@Builder
public class AuditLogEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private int expirationMonth;
private int expirationYear;
}
这是我的application.yml文件:
spring:
datasource:
mssql:
url:
username:
password:
driverClassName:
postgres:
url:
username:
password:
driverClassName:
hikari:
maximum-pool-size: 1
jpa:
show-sql: true
properties.hibernate.jdbc.lob.non_contextual_creation: true
database-platform: org.hibernate.dialect.HSQLDialect
hibernate.ddl-auto: none
有人可以告诉我这是怎么回事吗?