java - 配置 Hibernate mySQL 连接时出错 - 连接被拒绝

标签 java mysql spring hibernate model-view-controller

有几个类似主题的问题,但我进行了彻底的调查,但没有一个能解决我的问题。

我正在开发一个 MVC Java 项目。我使用 Spring 3、Tomcat 8、MySQL 5 和 Hibernate 4。我手动创建了一个数据库、一个表和一行。我的 Eclipse 项目无法访问数据库,尽管一切似乎都已就位且配置正确。

这是我的基础 DAO:

public class BaseDAOImpl<ENTITY> implements BaseDAO<ENTITY> {

private SessionFactory sessionFactory;
private Class<ENTITY> entityClass;

public BaseDAOImpl() {
    this.entityClass = (Class<ENTITY>) ((ParameterizedType)
              getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

// Other methods relying on the session //

@Override
public ENTITY createOrUpdate(ENTITY entity) {
    Session session = getSession();
    if (session==null) {
        //throw new ConnectException();
    }
    session.saveOrUpdate(entity);
    return null;
}
protected Session getSession() {
    if (sessionFactory == null) {
        initializeSessionFactory();
    }
    return this.sessionFactory.getCurrentSession();
}

public void initializeSessionFactory() {
    Configuration configuration = new Configuration().configure();
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties());
    sessionFactory = configuration.buildSessionFactory(builder.build());
}
}

和 hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
       <property name="hibernate.dialect">
          org.hibernate.dialect.MySQL5Dialect
       </property>
       <property name="hibernate.connection.driver_class">
          com.mysql.jdbc.Driver
       </property>
       <property name="hibernate.connection.url">
          jdbc:mysql://localhost/sudomusic
       </property>
       <property name="hibernate.connection.port">
          3307
       </property>
       <property name="hibernate.connection.username">
          root
       </property>
       <property name="hibernate.connection.password">
          kk
       </property>

       <!-- List of XML mapping files -->
       <mapping class="com.evolusound.sudomusic.domain.Customer"/>

    </session-factory>
</hibernate-configuration>

因此,当我尝试在数据库中保存新客户时,我收到 JDBC 连接异常。我最关心的事情是:我是否在 DAO 中以正确的方式创建了 sessionFactory? hibernate.cfg.xml 中是否缺少任何内容?它应该自动将我的 Customer.java 与 Customer 表映射,对吧?我不知道的是链条中缺少了哪一环,而且明明是连接,但我不知道在哪一步。是配置不正确还是第一次尝试失败了?任何帮助将不胜感激。

__

如果有帮助的话,Eclipse 框架似乎能够使用 mySQL 连接通过数据源资源管理器查看数据库。但是,它看不到其中的表格。我确信凭据是正确的(root、kk),因为我在命令行和 MySQL Workbench 中使用它们。一些帮助将非常感激。

__

这是控制台输出:

[Request processing failed; nested exception is org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect] with root cause
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2132)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
at com.evolusound.sudomusic.data_access.BaseDAOImpl.initializeSessionFactory(BaseDAOImpl.java:73)
...
AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost/sudomusic]

最佳答案

您的端口号正确吗? MySQL 的默认端口是 3306,但您已在 XML 中指定了 3307:

   <property name="hibernate.connection.url">
      jdbc:mysql://localhost/sudomusic
   </property>
   <property name="hibernate.connection.port">
      3307
   </property>

您的问题是您尝试连接到 localhost:3306 上的 MySQL,但连接被拒绝,可能是因为 MySQL 未运行,或者端口错误。

关于java - 配置 Hibernate mySQL 连接时出错 - 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226322/

相关文章:

java - Arraylist 没有正确删除对象?

java - @Autowire 未正确注入(inject) Spring @Bean 配置

java - 请求的资源不可用 - Spring MVC

java - 在 Spring Web 项目中使用 CSS 和 JS

java - 视觉虚拟机/j视觉虚拟机 : not supported for this JVM

java - 名称为 '@attr' 的 Json 转为 java POJO

mysql - 从表中选择 "lowest value"以获得多个 "ids"

php - MySQL 加入案例语句

php - 在 Mysql 数据库 PHP 中搜索多个 MySql 表

java - 通过 Spring Boot 加载属性文件进行映射