我在我的本地笔记本电脑上运行这个,它似乎工作正常,但是每次我试图在不同的服务器上运行时,都会出现以下错误。(均使用Java8u291)
错误“访问方言解析信息不能为空”似乎非常普遍。在我的例子中,原因是试图在同一个Spring Boot API中连接到多个数据库。
在我的情况下,解决它,为Spring开机2.5。Baeldung的这个例子很有帮助,这也是中等规模的例子。
这是申请表。为MySQL db指定方言的yml文件:
spring:
datasource:
primaryDB:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:<port>/<primary db name>?charSet=LATIN1
username: <username>
password: <password>
initialization-mode: always
otherDB:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:<port>/<other db name>?charSet=LATIN1
username: <username>
password: <password>
initialization-mode: always
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
对于主数据库的@Configuration类:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = { "com.foo.bar.repository" }
)
public class PrimaryDBConfig {
@Value("${spring.datasource.primaryDB.driverClassName}")
private String driver;
@Value("${spring.datasource.primaryDB.url}")
private String url;
@Value("${spring.datasource.primaryDB.username}")
private String username;
@Value("${spring.datasource.primaryDB.password}")
private String password;
@Primary // this seemingly redundant datasource is apparently used behind
// ... the scenes and throws an 'unsatisfied dependency' if removed.
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource.primaryDB")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public DataSource dataSourcePrimary(){
HikariConfig config = new HikariConfig();
config.setDriverClassName(driver);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
config.setAutoCommit(true);
return new HikariDataSource(config);
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean
entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSource") DataSource dataSource) {
return builder
.dataSource(dataSourcePrimary())
.packages("com.foo.bar.model")
.persistenceUnit("primaryDB")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory
entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
和“其他数据库”:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "otherDBEntityManagerFactory",
transactionManagerRef = "otherDBTransactionManager",
basePackages = { "com.foo.bar.otherDB" }
)
public class OtherDBConfig {
@Value("${spring.datasource.otherDB.driverClassName}")
private String driver;
@Value("${spring.datasource.otherDB.url}")
private String url;
@Value("${spring.datasource.otherDB.username}")
private String username;
@Value("${spring.datasource.otherDB.password}")
private String password;
@Bean(name = "otherDBDataSource")
@ConfigurationProperties(prefix = "spring.datasource.otherDB")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public DataSource dataSourceOtherDB(){
HikariConfig config = new HikariConfig();
config.setDriverClassName(driver);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
config.setAutoCommit(true);
return new HikariDataSource(config);
}
@Bean(name = "otherDBEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean otherDBEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("otherDBDataSource") DataSource dataSource) {
return
builder
.dataSource(dataSourceOtherDB())
.packages("com.foo.bar.otherDB.model")
.persistenceUnit("otherDB")
.build();
}
@Bean(name = "otherDBTransactionManager")
public PlatformTransactionManager otherDBTransactionManager(
@Qualifier("otherDBEntityManagerFactory") EntityManagerFactory
otherDBEntityManagerFactory) {
return new JpaTransactionManager(otherDBEntityManagerFactory);
}
}
包结构如下所示:
当然,拥有多个数据源是现代微服务API的反模式;因此,该解决方案基本上适用于整体(和分布式整体):-)
你错过申请了吗。不同服务器上的属性?从跟踪:
Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at
同时检查:关于无方言的回答可能是其他服务器无法连接到DB。
即使设置了hibernate,我也会遇到异常。方言属性。我使用的是hibernate 5.0.11和spring boot 1.4.2,mysql版本为5.7 波姆。xml 这里有什么问题?
我试图运行一个Spring引导应用程序,它使用Hibernate通过Springjpa,但我得到了这个错误: 我的pom.xml文件如下: 我的Hibernate配置是(方言配置在这个类的最后一个方法中): 我在这里做错了什么?
我正在和几个人一起为学校做一个项目。当我运行我的项目时,我得到了一堆错误,这些错误似乎是由以下原因引起的:当“hibernate”时,对DialectResolutionInfo的访问不能为空。未设置方言。 这是我的砰.xml: 这是我的错误报告: 这是因为缺少家属而引起的问题吗?我是个java新手,我自己似乎找不到问题。
我有个Spring 这是我的配置: 我找到了一些关于这个问题的帖子,但没有修复它。
我正在尝试在我的Spring引导项目中配置hibernate。 我有申请。属性文件 在UserDAO类中注册用户的方法: 但是,我收到错误: 我已经按照它的要求配置了方言,我甚至尝试过创建一个好的旧的< code>hibernate.cfg.xml文件,但是错误还是一样(它甚至好像忽略了这个文件)。 为什么会这样?从字面上看,昨天它没有问题。今天我尝试创建cfg文件,但它停止了工作(已将其删除)。
我正在尝试使用“sping-boot-starter-data-jpa”访问SQLite。 并且使用了“application.properties”。方言设置在“spring.jpa.database平台”。但是出现“DialectResolutionInfo不能为空”的错误。怎么办?