为什么 spring 启动应用程序不启动?
Why doesn't spring boot application launch?
我的初始程序旨在将数据插入我的数据库。我有 4 个表,其中插入了数据,为了优化,我在一个单独的线程中执行此操作,因为实体是异步创建的。我正在使用 consume 方法将实体添加到队列中。
package main.database;
import org.hibernate.Session;
import main.utilities.LogUtil;
import java.util.Queue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class EntityManager {
static final int BUFFER = 10000;
static Queue<Object> queue = new LinkedBlockingQueue<>();
static ExecutorService executor;
public static void open() {
LogUtil.logger.info("EntityManager::open started.");
executor = Executors.newSingleThreadExecutor();
executor.execute(EntityManager::save);
LogUtil.logger.info("EntityManager::open ended.");
}
public static void consume(Object entity) {
LogUtil.logger.trace("EntityManager::consume added entity [%s] to queue.".formatted(entity.getClass()));
queue.add(entity);
}
private static void save() {
LogUtil.logger.info("EntityManager::save opening session.");
Session session = Hibernate.createSession();
while (!executor.isShutdown()) {
int count = queue.size();
if (count < BUFFER) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
LogUtil.logger.fatal(e);
}
} else {
LogUtil.logger.info("EntityManager::save begin transaction");
session.beginTransaction();
for (int i = 0; i < BUFFER; i++) {
Object entity = queue.poll();
LogUtil.logger.trace("EntityManager::save: saving [%s]".formatted(entity.getClass().getSimpleName()));
session.saveOrUpdate(entity);
}
LogUtil.logger.info("EntityManager::save commit transaction");
session.getTransaction().commit();
}
}
LogUtil.logger.info("EntityManager::save closing session.");
LogUtil.logger.info("EntityManager::save begin last transaction");
int remainingCount = queue.size();
session.beginTransaction();
for (int i = 0; i < remainingCount; i++) {
Object entity = queue.poll();
LogUtil.logger.trace("EntityManager::save: saving [%s]".formatted(entity.getClass().getSimpleName()));
session.saveOrUpdate(entity);
}
LogUtil.logger.info("EntityManager::save commit last transaction");
session.getTransaction().commit();
session.close();
}
public static void close() {
LogUtil.logger.info("EntityManager::close started.");
LogUtil.logger.info("EntityManager::close executor.shutdown()");
executor.shutdown();
while (queue.size() > 0) {
Thread.onSpinWait();
}
try {
boolean isTerminated = executor.awaitTermination(1, TimeUnit.MINUTES);
if (!isTerminated) {
LogUtil.logger.error("ThreadPoolExecutor termination timeout. Fix your bug.");
System.exit(3);
}
LogUtil.logger.info("EntityManager::close executor is terminated.");
} catch (InterruptedException e) {
LogUtil.logger.fatal("", e);
}
LogUtil.logger.info("EntityManager::close ended.");
}
}
一段时间后,我决定使用 Spring Boot 将 web api 添加到我的应用程序中。 Spring 需要数据 JPA,因为一些 POST 请求将数据插入我的数据库。但是 Spring Data JPA 与我已经在使用的 Hibernate 依赖项发生冲突。
这是我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>landsreyk</groupId>
<artifactId>search-engine</artifactId>
<version>4</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.1.Final</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>
还有我的休眠配置文件'hibernate.cfg.xml'
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/search_engine?useSSL=false</property>
<property name="connection.username">landsreyk</property>
<property name="connection.password">12345678</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">20</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- Names the annotated entity class -->
<mapping class="model.Page"/>
<mapping class="model.Field"/>
<mapping class="model.Word"/>
<mapping class="model.Index"/>
</session-factory>
</hibernate-configuration>
我还有spring配置文件application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/search-engine
username: landsreyk
password: 12345678
jpa:
hibernate:
ddl-auto: none
sites:
- url: http://www.playback.ru
name: PlayBack.ru
- url: https://www.lenta.ru
name: Лента.ру
- url: https://www.skillbox.ru
name: Skillbox
user-agent: LandsreykSearchBot/1.0 (+http://www.google.com/bot.html)
referrer: http://www.google.com
web-interface: /admin
所以,我添加了一个简单的控制器DefaultContoller.java
package main.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class DefaultController
{
@RequestMapping(value = "/")
public String index()
{
return LocalDateTime.now().toString();
}
}
我的主要 class 是:
package main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
但是tomcat不会启动,因为休眠有一些麻烦的问题,我不太明白。
C:\Users\HP\.jdks\openjdk-17.0.1\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\lib\idea_rt.jar=61862:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath E:\java\skillbox\java_basics\FinalProject\search-engine\target\classes;E:\java\skillbox\java_basics\FinalProject\search-engine\lib\word-processor.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-web.6.0\spring-boot-starter-web-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter.6.0\spring-boot-starter-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot.6.0\spring-boot-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-autoconfigure.6.0\spring-boot-autoconfigure-2.6.0.jar;C:\Users\HP\.m2\repository\jakarta\annotation\jakarta.annotation-api.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\HP\.m2\repository\org\springframework\spring-core.3.13\spring-core-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-jcl.3.13\spring-jcl-5.3.13.jar;C:\Users\HP\.m2\repository\org\yaml\snakeyaml.29\snakeyaml-1.29.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-json.6.0\spring-boot-starter-json-2.6.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-databind.13.0\jackson-databind-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-annotations.13.0\jackson-annotations-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-core.13.0\jackson-core-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8.13.0\jackson-datatype-jdk8-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310.13.0\jackson-datatype-jsr310-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names.13.0\jackson-module-parameter-names-2.13.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat.6.0\spring-boot-starter-tomcat-2.6.0.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core.0.55\tomcat-embed-core-9.0.55.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el.0.55\tomcat-embed-el-9.0.55.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket.0.55\tomcat-embed-websocket-9.0.55.jar;C:\Users\HP\.m2\repository\org\springframework\spring-web.3.13\spring-web-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-beans.3.13\spring-beans-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-webmvc.3.13\spring-webmvc-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-aop.3.13\spring-aop-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-context.3.13\spring-context-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-expression.3.13\spring-expression-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa.6.0\spring-boot-starter-data-jpa-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-aop.6.0\spring-boot-starter-aop-2.6.0.jar;C:\Users\HP\.m2\repository\org\aspectj\aspectjweaver.9.7\aspectjweaver-1.9.7.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc.6.0\spring-boot-starter-jdbc-2.6.0.jar;C:\Users\HP\.m2\repository\com\zaxxer\HikariCP.0.3\HikariCP-4.0.3.jar;C:\Users\HP\.m2\repository\org\springframework\spring-jdbc.3.13\spring-jdbc-5.3.13.jar;C:\Users\HP\.m2\repository\jakarta\transaction\jakarta.transaction-api.3.3\jakarta.transaction-api-1.3.3.jar;C:\Users\HP\.m2\repository\jakarta\persistence\jakarta.persistence-api.2.3\jakarta.persistence-api-2.2.3.jar;C:\Users\HP\.m2\repository\org\springframework\data\spring-data-jpa.6.0\spring-data-jpa-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\data\spring-data-commons.6.0\spring-data-commons-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\spring-orm.3.13\spring-orm-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-tx.3.13\spring-tx-5.3.13.jar;C:\Users\HP\.m2\repository\org\slf4j\slf4j-api.7.32\slf4j-api-1.7.32.jar;C:\Users\HP\.m2\repository\org\springframework\spring-aspects.3.13\spring-aspects-5.3.13.jar;C:\Users\HP\.m2\repository\org\jsoup\jsoup.14.3\jsoup-1.14.3.jar;C:\Users\HP\.m2\repository\org\projectlombok\lombok.18.22\lombok-1.18.22.jar;C:\Users\HP\.m2\repository\mysql\mysql-connector-java.0.25\mysql-connector-java-8.0.25.jar;C:\Users\HP\.m2\repository\com\google\protobuf\protobuf-java.11.4\protobuf-java-3.11.4.jar;C:\Users\HP\.m2\repository\org\hibernate\hibernate-core.6.1.Final\hibernate-core-5.6.1.Final.jar;C:\Users\HP\.m2\repository\org\jboss\logging\jboss-logging.4.2.Final\jboss-logging-3.4.2.Final.jar;C:\Users\HP\.m2\repository\javax\persistence\javax.persistence-api.2\javax.persistence-api-2.2.jar;C:\Users\HP\.m2\repository\net\bytebuddy\byte-buddy.11.20\byte-buddy-1.11.20.jar;C:\Users\HP\.m2\repository\antlr\antlr.7.7\antlr-2.7.7.jar;C:\Users\HP\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\HP\.m2\repository\org\jboss\jandex.2.3.Final\jandex-2.2.3.Final.jar;C:\Users\HP\.m2\repository\com\fasterxml\classmate.5.1\classmate-1.5.1.jar;C:\Users\HP\.m2\repository\javax\activation\javax.activation-api.2.0\javax.activation-api-1.2.0.jar;C:\Users\HP\.m2\repository\org\hibernate\common\hibernate-commons-annotations.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\HP\.m2\repository\javax\xml\bind\jaxb-api.3.1\jaxb-api-2.3.1.jar;C:\Users\HP\.m2\repository\org\glassfish\jaxb\jaxb-runtime.3.1\jaxb-runtime-2.3.1.jar;C:\Users\HP\.m2\repository\org\glassfish\jaxb\txw2.3.1\txw2-2.3.1.jar;C:\Users\HP\.m2\repository\com\sun\istack\istack-commons-runtime.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\HP\.m2\repository\org\jvnet\staxex\stax-ex.8\stax-ex-1.8.jar;C:\Users\HP\.m2\repository\com\sun\xml\fastinfoset\FastInfoset.2.15\FastInfoset-1.2.15.jar;C:\Users\HP\.m2\repository\org\apache\logging\log4j\log4j-core.14.1\log4j-core-2.14.1.jar;C:\Users\HP\.m2\repository\org\apache\logging\log4j\log4j-api.14.1\log4j-api-2.14.1.jar;C:\Users\HP\.m2\repository\commons-validator\commons-validator.7\commons-validator-1.7.jar;C:\Users\HP\.m2\repository\commons-beanutils\commons-beanutils.9.4\commons-beanutils-1.9.4.jar;C:\Users\HP\.m2\repository\commons-digester\commons-digester.1\commons-digester-2.1.jar;C:\Users\HP\.m2\repository\commons-logging\commons-logging.2\commons-logging-1.2.jar;C:\Users\HP\.m2\repository\commons-collections\commons-collections.2.2\commons-collections-3.2.2.jar main.Main
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.0)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
нояб. 27, 2021 9:49:04 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.55]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring embedded WebApplicationContext
09:49:06.549 [main] ERROR - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
нояб. 27, 2021 9:49:06 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Tomcat]
09:49:06.597 [main] ERROR - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=17=](AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
at main.Main.main(Main.java:10)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:178)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
... 16 more
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
... 33 more
Process finished with exit code 1
我的项目结构如下:
为什么会出现这个错误?是因为我用的是Hibernate.Session吗?
此解决方案由 Geno Chen 建议。
我关注了linkorg.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
事实证明,当使用 spring 引导配置文件时,不需要休眠配置,即 hibernate.cfg.xml。
我还编辑了 application.yml spring 配置文件。这是我添加的
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: false
所以现在看起来像:
spring:
datasource:
url: jdbc:mysql://localhost:3306/search-engine
username: landsreyk
password: 12345678
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: false
hibernate:
ddl-auto: none
sites:
- url: http://www.playback.ru
name: PlayBack.ru
- url: https://www.lenta.ru
name: Лента.ру
- url: https://www.skillbox.ru
name: Skillbox
user-agent: LandsreykSearchBot/1.0 (+http://www.google.com/bot.html)
referrer: http://www.google.com
web-interface: /admin
现在我的网络应用程序启动时没有错误,初始页面显示在 localhost:8080
Apache Tomcat 放置它的位置。
我的初始程序旨在将数据插入我的数据库。我有 4 个表,其中插入了数据,为了优化,我在一个单独的线程中执行此操作,因为实体是异步创建的。我正在使用 consume 方法将实体添加到队列中。
package main.database;
import org.hibernate.Session;
import main.utilities.LogUtil;
import java.util.Queue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class EntityManager {
static final int BUFFER = 10000;
static Queue<Object> queue = new LinkedBlockingQueue<>();
static ExecutorService executor;
public static void open() {
LogUtil.logger.info("EntityManager::open started.");
executor = Executors.newSingleThreadExecutor();
executor.execute(EntityManager::save);
LogUtil.logger.info("EntityManager::open ended.");
}
public static void consume(Object entity) {
LogUtil.logger.trace("EntityManager::consume added entity [%s] to queue.".formatted(entity.getClass()));
queue.add(entity);
}
private static void save() {
LogUtil.logger.info("EntityManager::save opening session.");
Session session = Hibernate.createSession();
while (!executor.isShutdown()) {
int count = queue.size();
if (count < BUFFER) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
LogUtil.logger.fatal(e);
}
} else {
LogUtil.logger.info("EntityManager::save begin transaction");
session.beginTransaction();
for (int i = 0; i < BUFFER; i++) {
Object entity = queue.poll();
LogUtil.logger.trace("EntityManager::save: saving [%s]".formatted(entity.getClass().getSimpleName()));
session.saveOrUpdate(entity);
}
LogUtil.logger.info("EntityManager::save commit transaction");
session.getTransaction().commit();
}
}
LogUtil.logger.info("EntityManager::save closing session.");
LogUtil.logger.info("EntityManager::save begin last transaction");
int remainingCount = queue.size();
session.beginTransaction();
for (int i = 0; i < remainingCount; i++) {
Object entity = queue.poll();
LogUtil.logger.trace("EntityManager::save: saving [%s]".formatted(entity.getClass().getSimpleName()));
session.saveOrUpdate(entity);
}
LogUtil.logger.info("EntityManager::save commit last transaction");
session.getTransaction().commit();
session.close();
}
public static void close() {
LogUtil.logger.info("EntityManager::close started.");
LogUtil.logger.info("EntityManager::close executor.shutdown()");
executor.shutdown();
while (queue.size() > 0) {
Thread.onSpinWait();
}
try {
boolean isTerminated = executor.awaitTermination(1, TimeUnit.MINUTES);
if (!isTerminated) {
LogUtil.logger.error("ThreadPoolExecutor termination timeout. Fix your bug.");
System.exit(3);
}
LogUtil.logger.info("EntityManager::close executor is terminated.");
} catch (InterruptedException e) {
LogUtil.logger.fatal("", e);
}
LogUtil.logger.info("EntityManager::close ended.");
}
}
一段时间后,我决定使用 Spring Boot 将 web api 添加到我的应用程序中。 Spring 需要数据 JPA,因为一些 POST 请求将数据插入我的数据库。但是 Spring Data JPA 与我已经在使用的 Hibernate 依赖项发生冲突。
这是我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>landsreyk</groupId>
<artifactId>search-engine</artifactId>
<version>4</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.1.Final</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>
还有我的休眠配置文件'hibernate.cfg.xml'
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/search_engine?useSSL=false</property>
<property name="connection.username">landsreyk</property>
<property name="connection.password">12345678</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">20</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- Names the annotated entity class -->
<mapping class="model.Page"/>
<mapping class="model.Field"/>
<mapping class="model.Word"/>
<mapping class="model.Index"/>
</session-factory>
</hibernate-configuration>
我还有spring配置文件application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/search-engine
username: landsreyk
password: 12345678
jpa:
hibernate:
ddl-auto: none
sites:
- url: http://www.playback.ru
name: PlayBack.ru
- url: https://www.lenta.ru
name: Лента.ру
- url: https://www.skillbox.ru
name: Skillbox
user-agent: LandsreykSearchBot/1.0 (+http://www.google.com/bot.html)
referrer: http://www.google.com
web-interface: /admin
所以,我添加了一个简单的控制器DefaultContoller.java
package main.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class DefaultController
{
@RequestMapping(value = "/")
public String index()
{
return LocalDateTime.now().toString();
}
}
我的主要 class 是:
package main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
但是tomcat不会启动,因为休眠有一些麻烦的问题,我不太明白。
C:\Users\HP\.jdks\openjdk-17.0.1\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\lib\idea_rt.jar=61862:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath E:\java\skillbox\java_basics\FinalProject\search-engine\target\classes;E:\java\skillbox\java_basics\FinalProject\search-engine\lib\word-processor.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-web.6.0\spring-boot-starter-web-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter.6.0\spring-boot-starter-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot.6.0\spring-boot-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-autoconfigure.6.0\spring-boot-autoconfigure-2.6.0.jar;C:\Users\HP\.m2\repository\jakarta\annotation\jakarta.annotation-api.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\HP\.m2\repository\org\springframework\spring-core.3.13\spring-core-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-jcl.3.13\spring-jcl-5.3.13.jar;C:\Users\HP\.m2\repository\org\yaml\snakeyaml.29\snakeyaml-1.29.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-json.6.0\spring-boot-starter-json-2.6.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-databind.13.0\jackson-databind-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-annotations.13.0\jackson-annotations-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\core\jackson-core.13.0\jackson-core-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8.13.0\jackson-datatype-jdk8-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310.13.0\jackson-datatype-jsr310-2.13.0.jar;C:\Users\HP\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names.13.0\jackson-module-parameter-names-2.13.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat.6.0\spring-boot-starter-tomcat-2.6.0.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core.0.55\tomcat-embed-core-9.0.55.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el.0.55\tomcat-embed-el-9.0.55.jar;C:\Users\HP\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket.0.55\tomcat-embed-websocket-9.0.55.jar;C:\Users\HP\.m2\repository\org\springframework\spring-web.3.13\spring-web-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-beans.3.13\spring-beans-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-webmvc.3.13\spring-webmvc-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-aop.3.13\spring-aop-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-context.3.13\spring-context-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-expression.3.13\spring-expression-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa.6.0\spring-boot-starter-data-jpa-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-aop.6.0\spring-boot-starter-aop-2.6.0.jar;C:\Users\HP\.m2\repository\org\aspectj\aspectjweaver.9.7\aspectjweaver-1.9.7.jar;C:\Users\HP\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc.6.0\spring-boot-starter-jdbc-2.6.0.jar;C:\Users\HP\.m2\repository\com\zaxxer\HikariCP.0.3\HikariCP-4.0.3.jar;C:\Users\HP\.m2\repository\org\springframework\spring-jdbc.3.13\spring-jdbc-5.3.13.jar;C:\Users\HP\.m2\repository\jakarta\transaction\jakarta.transaction-api.3.3\jakarta.transaction-api-1.3.3.jar;C:\Users\HP\.m2\repository\jakarta\persistence\jakarta.persistence-api.2.3\jakarta.persistence-api-2.2.3.jar;C:\Users\HP\.m2\repository\org\springframework\data\spring-data-jpa.6.0\spring-data-jpa-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\data\spring-data-commons.6.0\spring-data-commons-2.6.0.jar;C:\Users\HP\.m2\repository\org\springframework\spring-orm.3.13\spring-orm-5.3.13.jar;C:\Users\HP\.m2\repository\org\springframework\spring-tx.3.13\spring-tx-5.3.13.jar;C:\Users\HP\.m2\repository\org\slf4j\slf4j-api.7.32\slf4j-api-1.7.32.jar;C:\Users\HP\.m2\repository\org\springframework\spring-aspects.3.13\spring-aspects-5.3.13.jar;C:\Users\HP\.m2\repository\org\jsoup\jsoup.14.3\jsoup-1.14.3.jar;C:\Users\HP\.m2\repository\org\projectlombok\lombok.18.22\lombok-1.18.22.jar;C:\Users\HP\.m2\repository\mysql\mysql-connector-java.0.25\mysql-connector-java-8.0.25.jar;C:\Users\HP\.m2\repository\com\google\protobuf\protobuf-java.11.4\protobuf-java-3.11.4.jar;C:\Users\HP\.m2\repository\org\hibernate\hibernate-core.6.1.Final\hibernate-core-5.6.1.Final.jar;C:\Users\HP\.m2\repository\org\jboss\logging\jboss-logging.4.2.Final\jboss-logging-3.4.2.Final.jar;C:\Users\HP\.m2\repository\javax\persistence\javax.persistence-api.2\javax.persistence-api-2.2.jar;C:\Users\HP\.m2\repository\net\bytebuddy\byte-buddy.11.20\byte-buddy-1.11.20.jar;C:\Users\HP\.m2\repository\antlr\antlr.7.7\antlr-2.7.7.jar;C:\Users\HP\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\HP\.m2\repository\org\jboss\jandex.2.3.Final\jandex-2.2.3.Final.jar;C:\Users\HP\.m2\repository\com\fasterxml\classmate.5.1\classmate-1.5.1.jar;C:\Users\HP\.m2\repository\javax\activation\javax.activation-api.2.0\javax.activation-api-1.2.0.jar;C:\Users\HP\.m2\repository\org\hibernate\common\hibernate-commons-annotations.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\HP\.m2\repository\javax\xml\bind\jaxb-api.3.1\jaxb-api-2.3.1.jar;C:\Users\HP\.m2\repository\org\glassfish\jaxb\jaxb-runtime.3.1\jaxb-runtime-2.3.1.jar;C:\Users\HP\.m2\repository\org\glassfish\jaxb\txw2.3.1\txw2-2.3.1.jar;C:\Users\HP\.m2\repository\com\sun\istack\istack-commons-runtime.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\HP\.m2\repository\org\jvnet\staxex\stax-ex.8\stax-ex-1.8.jar;C:\Users\HP\.m2\repository\com\sun\xml\fastinfoset\FastInfoset.2.15\FastInfoset-1.2.15.jar;C:\Users\HP\.m2\repository\org\apache\logging\log4j\log4j-core.14.1\log4j-core-2.14.1.jar;C:\Users\HP\.m2\repository\org\apache\logging\log4j\log4j-api.14.1\log4j-api-2.14.1.jar;C:\Users\HP\.m2\repository\commons-validator\commons-validator.7\commons-validator-1.7.jar;C:\Users\HP\.m2\repository\commons-beanutils\commons-beanutils.9.4\commons-beanutils-1.9.4.jar;C:\Users\HP\.m2\repository\commons-digester\commons-digester.1\commons-digester-2.1.jar;C:\Users\HP\.m2\repository\commons-logging\commons-logging.2\commons-logging-1.2.jar;C:\Users\HP\.m2\repository\commons-collections\commons-collections.2.2\commons-collections-3.2.2.jar main.Main
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.0)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
нояб. 27, 2021 9:49:04 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.55]
нояб. 27, 2021 9:49:04 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring embedded WebApplicationContext
09:49:06.549 [main] ERROR - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
нояб. 27, 2021 9:49:06 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Tomcat]
09:49:06.597 [main] ERROR - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=17=](AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
at main.Main.main(Main.java:10)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:178)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
... 16 more
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:138)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
... 33 more
Process finished with exit code 1
我的项目结构如下:
为什么会出现这个错误?是因为我用的是Hibernate.Session吗?
此解决方案由 Geno Chen 建议。 我关注了linkorg.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
事实证明,当使用 spring 引导配置文件时,不需要休眠配置,即 hibernate.cfg.xml。 我还编辑了 application.yml spring 配置文件。这是我添加的
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: false
所以现在看起来像:
spring:
datasource:
url: jdbc:mysql://localhost:3306/search-engine
username: landsreyk
password: 12345678
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
show-sql: false
hibernate:
ddl-auto: none
sites:
- url: http://www.playback.ru
name: PlayBack.ru
- url: https://www.lenta.ru
name: Лента.ру
- url: https://www.skillbox.ru
name: Skillbox
user-agent: LandsreykSearchBot/1.0 (+http://www.google.com/bot.html)
referrer: http://www.google.com
web-interface: /admin
现在我的网络应用程序启动时没有错误,初始页面显示在 localhost:8080 Apache Tomcat 放置它的位置。